Вот рекурсивная функция: PHP: public function build_tree($cats){ foreach ($cats as $cat) { $result = (new \yii\db\Query()) ->select(['id', 'name', 'parent_id', 'guid']) ->from('category') ->where(['parent_id' => $cat['id']]) ->all(); $i = 1; $dats = array(); foreach ($result as $dat) { $cat_detail['text'] = $dat['name']; $cat_detail['href'] = \yii\helpers\Url::to(['', 'id' => trim($dat['id'])]); $cat_detail['parent_id'] = $dat['parent_id']; $cat_detail['guid'] = $dat['guid']; $cat_detail['id'] = trim($dat['id']); $dats[$i] = $cat_detail; $i++; } $this->build_tree($dats); $cat['nodes'] = $dats; } return $cats; } Вот так ее вызываю: PHP: $result = (new \yii\db\Query()) ->select(['id', 'name', 'parent_id', 'guid']) ->from('category') ->all(); $cats = array(); $i=1; foreach ($result as $cat) { if (empty($cat['parent_id'])) { $cat_detail['text'] = $cat['name']; $cat_detail['href'] = \yii\helpers\Url::to(['', 'id' => trim($cat['id'])]); $cat_detail['parent_id'] = $cat['parent_id']; $cat_detail['guid'] = $cat['guid']; $cat_detail['id'] = trim($cat['id']); $cats[$i] = $cat_detail; $i++; }; } $tree = $this->build_tree($cats); Но эта строчка $cat['nodes'] = $dats; как будто игнорируется, что я не так делаю?
отладка/debug http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
в чем логика в $cat['nodes'] = $dats; так и не понял, за то конфликт есть PHP: foreach ($cats as $cat) { $cat['nodes'] = $dats; } array ( nodes ) перезаписать, перезаписать, перезаписать, перезаписать, перезаписать, перезаписать, перезаписать, и т.д. сам массив nodes при этом ни где не используется. Тогда как определил то что строка игнорируется? в деле она не игнорируется, а переменная не используется. Мб я долблюсь в глаза и не вижу чего то..
Я думаю, дело в том, что аргумент - не ссылка, поэтому не перезаписывается. А вообще, это не хорошо, делать запросы в рекурсивной функции. Лучше использовать какой-нибудь метод хранения деревьев в таблицах, как Nested Sets или materialized Path, особенно потому что есть готовые реализации для yii этих вещей. И логика вызывающей функции тоже нарушена. Вы сначала считываете вообще все категории, всех уровней, а потом для каждой хотите дерево потомков