MYSQL父子表相同;PHP将父级中的子级嵌套为多维数组

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

以上是 MYSQL父子表相同;PHP将父级中的子级嵌套为多维数组 的全部内容, 来源链接: utcz.com/qa/410390.html

回到顶部