Как правильно выполнить рекурсию в php?

Всем привет!

Ответ должен быть элементарным, где-то косячу, но где именно не вижу.

У меня есть дерево категорий в таком виде:

"1" = [
   "id" = 30
   "category_id" = 1,
   "parent_id" = null,
   "count" = 0,
   "childs" = []
},
"2" = [
   "id" = 31,
   "category_id" = 2,
   "parent_id" = null,
   "count" = 0,
   "childs" = [
      21,
      22,
      23,
      24
],
"21" = [
   "id" = 32,
   "category_id" = 21,
   "parent_id" = 2,
   "count" = 0,
   "childs" = [
      211,
      212,
      213
],

Задача - пройтись по массиву и записать в дочерние категории не только дочерние первого уровня, а все дочерние. То есть у категории под номером 2, должны быть не только 21,22,23,24, но и 211,212,213 и так далее.

Сделал я таким образом:

        foreach ($tree as $id => $item) {
            if (!empty($item['childs'])) {
                foreach($item['childs'] as $child) {
                    $tree = self::recursive($tree, $child);
                }
            }
        }

        public function recursive($tree, $parent)
        {
           foreach($tree as $id => $item) {
               if ($id == $parent) {
                   $number = $tree[$id]['parent_id'];
                   foreach ($tree[$id]['childs'] as $child) {
                    $tree[$number]['childs'][] = $child;
                    $tree = self::recursive($tree, $child);
                }
               }
           }
           return $tree;
        }

Я получаю первый и второй уровни вложенности. Как мне получить все уровни?

Полагаю, что я где-то допустил синтаксическую оплошность. Плиз, хелп ми))


Ответы (0 шт):