|
|
|
| Есть стандартное дерево
id | parent | name
1 0 Раздел 1
2 0 Раздел 2
3 0 Раздел 3
4 1 Раздел 1.1
5 1 Раздел 1.2
6 1 Раздел 1.3
7 4 Раздел 1.1.1
8 4 Раздел 1.1.2
9 4 Раздел 1.1.3
10 2 Раздел 2.1
|
Мне нужно получить все вложенные id внутри какой либо ветки.
например getId(1) вернет 4,5,6,7,8,9
getId(2) вернет 10
getId(4) вернет 7,8,9 | |
|
|
|
|
|
|
|
для: mr.artek
(25.05.2010 в 20:23)
| |
<?
$al = array(
1 => array(0, 'Раздел 1'),
2 => array(0, 'Раздел 2'),
3 => array(0, 'Раздел 3'),
4 => array(1, 'Раздел 1.1'),
5 => array(1, 'Раздел 1.2'),
6 => array(1, 'Раздел 1.3'),
7 => array(4, 'Раздел 1.1.1'),
8 => array(4, 'Раздел 1.1.2'),
9 => array(4, 'Раздел 1.1.3'),
10 => array(2, 'Раздел 2.1'),
);
function getId($id) {
global $al;
$ret = array();
foreach ( $al as $k => $v ) {
if ( $v[0] == $id ) $ret[] = $k;
}
return $ret;
}
print_r(getId(1));
|
| |
|
|
|
|
|
|
|
для: Саня
(25.05.2010 в 20:32)
| | Удивляете
:( | |
|
|
|
|
|
|
|
для: Trianon
(26.05.2010 в 02:51)
| | Глобалом? | |
|
|
|
|
|
|
|
для: Саня
(26.05.2010 в 14:33)
| | Допилил ваш код, заработа как надо ) спасибо )
<?
$arr = array(
1 => array(0, 'Раздел 1'),
2 => array(0, 'Раздел 2'),
3 => array(0, 'Раздел 3'),
4 => array(1, 'Раздел 1.1'),
5 => array(1, 'Раздел 1.2'),
6 => array(1, 'Раздел 1.3'),
7 => array(4, 'Раздел 1.1.1'),
8 => array(4, 'Раздел 1.1.2'),
9 => array(4, 'Раздел 1.1.3'),
10 => array(2, 'Раздел 2.1'),
);
function getId($arr, $id) {
$return_id = array();
$parent_id = array($id);
foreach($arr as $k => $v) {
if(in_array($v[0], $parent_id)){
$return_id[] = $k;
$parent_id[] = $k;
}
}
return $return_id;
}
print_r(getId($arr, 1));
?>
|
| |
|
|
|
|
|
|
|
для: Саня
(25.05.2010 в 20:32)
| | Спасибо, но выводит 4,5,6 то есть опускаеться только на 1 уровень, а нужно получить все подпапки до самого конца, в данном примере 4,5,6,7,8,9 | |
|
|
|
|
|
|
|
для: mr.artek
(26.05.2010 в 14:23)
| | . | |
|
|
|
|
|
|
|
для: Саня
(26.05.2010 в 14:38)
| | тут рекурсия нужна, без рекурсии никуда | |
|
|
|
|
|
|
|
для: Ури Геллер
(26.05.2010 в 15:47)
| | (устало)
Не нужна тут рекурсия.
Хоть с ней и проще. | |
|
|
|
|
|
|
|
для: Trianon
(27.05.2010 в 01:37)
| | без рекурсии это когда выборка идет из базы там соритировать по родителю надо | |
|
|
|
|
|
|
|
для: Ури Геллер
(27.05.2010 в 10:57)
| | С чего вы взяли что тут идёт работа с базой? | |
|
|
|
|
|
|
|
для: Trianon
(27.05.2010 в 01:37)
| | Trianon, ваш вариант в студию.. | |
|
|
|
|
|
|
|
для: Tonik992
(27.05.2010 в 11:26)
| | Вариант без рекурсии выше на 8 постов. | |
|
|
|
|
|
|
|
для: Саня
(27.05.2010 в 11:38)
| | Ваш вариант выдает Array ( [0] => 4 [1] => 5 [2] => 6 ) , и очевидно, это маловато несколько.
собственно, я поэтому и удивился. | |
|
|
|
|
|
|
|
для: Trianon
(27.05.2010 в 12:01)
| | Да, я упустил подчиненные элементы в своём исходном примере. Но mr.artek дописал мой скрипт в (26.05.2010 в 14:37). | |
|
|
|
|
|
|
|
для: Саня
(27.05.2010 в 12:27)
| | В целом - да.
PS to Ури Геллер:
Что лишь подтверждает тезис о том, что для этой задачи рекурсия не нужна, а можно обойтись лишь циклом. | |
|
|
|
|
|
|
|
для: Tonik992
(27.05.2010 в 11:26)
| | . | |
|
|
|
|
|
|
|
для: Tonik992
(27.05.2010 в 11:26)
| | Вам поиском найти пост с соответствующими теоретическими обоснованиями и примером? | |
|
|
|