Прочитайте код. Если строка из категории имеет родительский идентификатор, дочерние идентификаторы добавляются в массив под элементом родительского идентификатора children
. Это просто берет результирующий набор и преобразует его в иерархическую структуру данных, которая исключает повторения местами и облегчает прохождение.
Обновление:
В частности, что делает следующая строка кода:
$data[0][$row->parentid]['children'][$row->id] = $row->name;
Ваша функция просматривает ваш набор результатов запроса и проверяет, указывает ли текущая строка родительский идентификатор. Если это так, он добавляет хеш к вашему массиву массивов (вашей иерархии).
foreach ($Q->result() as $row) {
Ваш запрос представляет собой набор объектов строк. Кажется, что у каждого объекта есть атрибут для каждого столбца, выбранного в вашем запросе SQL. Так что для ваших SELECT
полей:
$this->db->select('id,name,parentid');
У нас есть:
$row->id
$row->name
$row->parentid
Возвращаясь к исходной строке кода:
$data[0][$row->parentid]['children'][$row->id] = $row->name;
Эта строка создает такую структуру:
Array (
[0] => Array ( // $data[0]
[400] => Array ( // $data[0][$row->parentid]
[children] => Array ( // $data[0][$row->parentid]['children']
[53] => Animal // these are from [$row->id] = $row->name;
[54] => Mineral
[55] => Vegetable
)
)
[401] => Array (
[children] => Array (
[4] => Wood
[6] => Metal
[2] => Plastic
)
)
)
)
Вы могли бы немного упростить эту структуру, удалив первый массив-оболочку $data[0]
. Таким образом, вы измените код следующим образом:
$data[$row->parentid]['children'][$row->id] = $row->name;
Это меняет структуру следующим образом:
Array (
[400] => Array ( // $data[$row->parentid]
[children] => Array ( // $data[$row->parentid]['children']
[53] => Animal // these are from [$row->id] = $row->name;
[54] => Mineral
[55] => Vegetable
)
)
[401] => Array (
[children] => Array (
[4] => Wood
[6] => Metal
[2] => Plastic
)
)
)
Надеюсь, это прояснит код для вас.