2013-08-01 3 views
0

У меня есть эта таблица в моей БД (я надеюсь, что это правильно показал):создать иерархию подкатегорий многомерного массива

 
+++++++++++++++++++++++++++ 
| id_child |--| id_parent | 
+++++++++++++++++++++++++++ 
| 5  |--|  2  | 
| 6  |--|  2  | 
| 7  |--|  4  | 
| 8  |--|  4  | 
| 9  |--|  5  | 
| 10 |--|  5  | 
| 11 |--|  9  | 
| 12 |--|  9  | 
--------------------------- 

Я написал PHP рекурсивной функцию, которые создают многомерный массив из родителей передаются (в этом случай '2'). Итак, если я поставлю print_r я получить этот результат:

Array ([5] => Array ([9] => Array ([11] => Array () [12] => Array ()) [10] => Array ()) [6] => Array ())

Как я могу получить структуру этого типа? (я исключаю первый родитель, 2)

 
(2) 
-5 
--9 
----11 
----12 
--10 
-6 

Спасибо.

+0

(в) klkvsk, (в) Евгений Rieck: ваши решения отлично работают. Есть ли лучшее решение, чем массив для быстрого получения родительского элемента дочернего элемента и дочерних элементов родителя? – Tab

+0

Например: если я хочу получить детей родителя = 9 (11 и 12), есть ли простой способ? Я думаю, что мой массив будет изменен. – Tab

+0

Просто запустите свою рекурсивную функцию при ID = 9 и создайте новый массив оттуда –

ответ

1

Вы должны были бы еще рекурсивную функцию для итерации над массивом, например, так:

function printCategories($categories, $level = 1) {         
    foreach ($categories as $cat => $subCats) {          
     echo str_repeat('-', $level) . $cat . "\n";         
     printCategories($subCats, $level+1);          
    }                    
}                     
printCategories($categories);  
+0

спасибо! Он отлично работает! – Tab

1
<?php 

function printtree($tree, $level) { 
    $prefix=str_repeat('-',$level); 
    foreach ($tree as $k=>$v) { 
    echo "$prefix$k<br>\n"; 
    if (is_array($v)) if (sizeof($v)>0) printtree($v,$level+1); 
    } 
} 

$tree=array(5=>array(9=>array(11=>array(), 12=>array()), 10=>array()), 6=>array()); 
printtree($tree,1); 

?> 
+0

спасибо! Он отлично работает! – Tab

Смежные вопросы