MYSQL возвращает массив, как показано ниже. Я использую столбец: 'id_parent', чтобы самостоятельно ссылаться на таблицу для создания иерархии. Таким образом, запись с «id» из 2 может быть родителем любой записи с «id_parent» из 2 и так далее.
Array ( [1] => Array ( [id] => 2 [name] => About [id_parent] => NULL ) [2] => Array ( [id] => 4 [name] => About Child [id_parent] => 2 ) [3] => Array ( [id] => 5 [name] => About Child's Child [id_parent] => 4 ) )
Как я могу вложить дочерние элементы в массив в своем родительском массиве
Array ( [1] => Array ( [id] => 2 [name] => About [id_parent] => [children] => Array ( [id] => 4 [name] => About Child [id_parent] => 2 [children] => Array ( [id] => 5 [name] => About Child's Child [id_parent] => 4 ) ) ) )
Ссылки, с преимуществами, которые не имеют значения (дочерние узлы могут быть представлены перед их родителями):
$tree = array('NULL' => array('children' => array())); foreach($array as $item){ if(isset($tree[$item['id']])){ $tree[$item['id']] = array_merge($tree[$item['id']],$item); } else { $tree[$item['id']] = $item; } $parentid = is_null($item['id_parent']) ? 'NULL' : $item['id_parent']; if(!isset($tree[$parentid])) $tree[$parentid] = array('children' => array()); //this & is where the magic happens: any alteration to $tree[$item['id'] // will reflect in the item $tree[$parentid]['children'] as they are the same // variable. For instance, adding a child to $tree[$item['id']]['children] // will be seen in // $tree[$parentid]['children'][<whatever index $item['id'] has>]['children] $tree[$parentid]['children'][] = &$tree[$item['id']]; } $result = $tree['NULL']['children']; //always unset references unset($tree);