Я пытаюсь внедрить систему категорий на своем веб-сайте. Проблема в том, что категория может иметь ребенка. До сих пор мой стол category
выглядит следующим образом:Рекурсивный цикл для категории
id, name, parent_id
До сих пор я сделал петлю, но она работает только на 2-х уровнях. Вот мой код:
for($i=0;$i<count($data);$i++){
$tree[$data[$i]->name] = array();
for($j=0;$j<count($data);$j++){
if($data[$j]->parent_id == $data[$i]->id){
$tree[$data[$i]->name][] = $data[$j]->name;
}
}
}
Это вернуть мне массив как это:
Array
(
[0] => Array
(
[1] => Cat1
[children] => Array
(
[12] => sub cat 1
[13] => sub cat 2
[14] => sub cat 3
)
)
[1] => Array
(
[2] => Cat2
)
[2] => Array
(
[3] => Cat3
)
)
Как я могу сделать его эффективным и рекурсивный иметь что-то подобное:
Array
(
[0] => Array
(
[1] => Cat1
[children] => Array
(
[12] => sub cat 1
[13] => sub cat 2
[14] => sub cat 3
[children] => Array
(
[1] => sub sub cat 1
)
)
)
[1] => Array
(
[2] => Cat2
)
[2] => Array
(
[3] => Cat3
)
)
Благодарности ваша помощь
EDIT
Я работаю на Zend, и вернуть меня больше data
, как это:
Zend_Db_Table_Rowset Object
(
[_data:protected] => Array
(
[0] => Array
(
[id] => 1
[name] => Cinema
[type] => category
[slug] => cinema
[parent_id] => -1
)
[1] => Array
(
[id] => 2
[name] => Horror
[type] => category
[slug] => horror
[parent_id] => 1
)
Привет, да, я знаю, но, к сожалению, у меня нет выбора, я должен использовать его так, как это в настоящее время – lkartono
до какого уровня у хочу вложенную категорию Если у у вас есть 2-3 слоя, чем ваш код является перфективным с еще одним циклом ... – Shwet
Нет предела вложенного уровня. Должен ли я просто использовать 2 таблицы в этом случае? – lkartono