Это мой анализ структуры вашего массива:
У вас есть четырехуровневый многомерный массив для хранения имени строки.
[0] [родительский идентификатор] ['children'] [id строки] = имя строки.
Ваш foreach(navlist as key=>list)
устанавливает [родительский идентификатор] как $key
и ['children'] [идентификатор строки] = имя строки как $list
.
Ваш foreach($list as $topkey=>$toplist)
устанавливает ['children'] как $topkey
и [id строки] = имя строки как $toplist
.
Ваш вызов anchor('welcome/cat/$topkey, $toplist)
отправляет массив в вспомогательную функцию привязки, возможно, именно поэтому вы видите вывод «массива» в браузер. Эта функция принимает только строку для аргумента «текст для отображения».
EDIT
Чтобы ответить на ваш комментарий, попробуйте следующее:
Вместо:
echo anchor("welcome/cat/$topkey", $toplist);
Используйте это:
echo anchor("welcome/cat/$topkey", $toplist['name']);
Теперь вы будете передавать значение $data[0][$row->id]['name']
, которое является вашей конструкцией для хранения $row->name
в вашей модели.
РЕДАКТИРОВАТЬ 2:
Я также заметил, что вы используете
if($Q->num_rows >0){
Вам не хватает скобки для функции num_rows.
if($Q->num_rows() > 0) {
Это может иметь отношение к отсутствующим категориям родителей и детей. Если нет, я рекомендую удалить из запроса ваше предложение group_by()
, просто чтобы посмотреть, не мешает ли это вам. Если это не поможет, уберите order_by()
и посмотрите, что произойдет.