Код: Выделить всё
public function getCategoriesTree($idRootCategory = null)
{
$this->db->select("gc.*");
$this->db->from('glami_categories gc');
$this->db->where('CATEGORY_PARENT_ID', $idRootCategory);
$categories = array();
foreach ($this->db->get()->result_array() as $item) {
$children = [];
$subcats = $this->getChildren($children, $item['CATEGORY_ID']);
$item['children'] = $subcats;
$categories[] = $item;
}
return $categories;
}
private function getChildren(&$children, $parent_id)
{
if (!$parent_id) {
return $children;
}
$subcats = $this->db
->select("*")
->from('glami_categories')
->where('CATEGORY_PARENT_ID', $parent_id)
->get()
->result_array();
if ($subcats) {
if (isset($children[$parent_id])) {
$children[$parent_id]['children'][$subcats[0]['CATEGORY_ID']] = $subcats[0];
} else {
$children[$subcats[0]['CATEGORY_ID']] = $subcats[0];
}
foreach ($subcats as $subcat) {
$paretn_sequence[] = $parent_id;
return $this->getChildren($children, $subcat["CATEGORY_ID"]);
}
}
return $children;
}
В заключение меня интересует, в чем моя ошибка в рекурсии и как ее улучшить, чтобы получить желаемый результат.
РЕДАКТИРОВАТЬ
Правильный результат структурирован следующим образом:
Код: Выделить всё
array(1) {
[0]=>
array(5) {
["CATEGORY_ID"]=>
string(1) "1"
["CATEGORY_NAME"]=>
string(39) "Дамски дрехи и обувки"
["CATEGORY_FULLNAME"]=>
string(39) "Дамски дрехи и обувки"
["CATEGORY_PARENT_ID"]=>
NULL
["children"]=>
array(2) {
[180]=>
array(5) {
["CATEGORY_ID"]=>
string(3) "180"
["CATEGORY_NAME"]=>
string(23) "Дамски дрехи"
["CATEGORY_FULLNAME"]=>
string(76) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи"
["CATEGORY_PARENT_ID"]=>
string(1) "1"
["children"]=>
array(1) {
[184]=>
array(4) {
["CATEGORY_ID"]=>
string(3) "184"
["CATEGORY_NAME"]=>
string(10) "Рокли"
["CATEGORY_FULLNAME"]=>
string(89) "Glami.bg | Дамски дрехи и обувки | Дамски дрехи | Рокли"
["CATEGORY_PARENT_ID"]=>
string(3) "180"
}
}
}
}
}
}