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);