我有
`<?php
$arr = [['id'=> 1, 'parent_id' => '-', 'name' => 'id1'],
['id' => 2, 'parent_id' => 1, 'name'=> 'id2' ],
['id' => 3, 'parent_id' => 1, 'name'=> 'id3' ],
['id' => 4, 'parent_id' => '-', 'name'=> 'id4' ]
,['id' => 5,'parent_id' => 2, 'name'=> 'id5' ],
['id' => 6, 'parent_id' => 3, 'name'=> 'id6' ],
['id' => 7, 'parent_id' => '-', 'name'=> 'id7' ],
['id' => 8, 'parent_id' => 3, 'name'=> 'id8' ],
['id' => 9, 'parent_id' => 4, 'name'=> 'id9' ],
['id' => 10, 'parent_id' => 9, 'name'=> 'id10' ]];
// 1-2-5
// |-3-6
//---|-8
//------
// 4-9-10
//---
// 7
$new = array();
foreach ($arr as $a){
$new[$a['parent_id']][] = $a;
}
$tree = createTree($new, array($arr[0]));
print_r($tree);
function createTree(&$list, $parent){
$tree = array();
foreach ($parent as $k=>$l){
if(isset($list[$l['id']])){
$l['children'] = createTree($list, $list[$l['id']]);
}
$tree[] = $l;
}
return $tree;
}
`我的问题是如何将数组列表写入到array中,但就像一棵树一样,我设法完成了第一个系列。
所以我的问题是,在第一个‘parent_id _id’=> '-‘之后,这个递归操作不会重复,它不会转到其他父项,希望获得任何解释的帮助。
发布于 2021-11-17 14:25:46
此解决方案可以帮助您。
function buildTree(array $elements, ?int $parentId = null): array
{
$branch = [];
foreach ($elements as $element) {
if ($element['parent_id'] === $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$array = [
['id'=> 1, 'parent_id' => '-', 'name' => 'id1'],
['id' => 2, 'parent_id' => 1, 'name'=> 'id2'],
['id' => 3, 'parent_id' => 1, 'name'=> 'id3'],
['id' => 4, 'parent_id' => '-', 'name'=> 'id4'],
['id' => 5,'parent_id' => 2, 'name'=> 'id5'],
['id' => 6, 'parent_id' => 3, 'name'=> 'id6'],
['id' => 7, 'parent_id' => '-', 'name'=> 'id7'],
['id' => 8, 'parent_id' => 3, 'name'=> 'id8'],
['id' => 9, 'parent_id' => 4, 'name'=> 'id9'],
['id' => 10, 'parent_id' => 9, 'name'=> 'id10'],
];
$tree = [];
foreach ($array as $element) {
if ($element['parent_id'] === '-') {
$tree[] = [
'id' => $element['id'],
'name' => $element['name'],
'children' => buildTree($array, $element['id']),
];
}
}树的print_r:
Array
(
[0] => Array
(
[id] => 1
[name] => id1
[children] => Array
(
[0] => Array
(
[id] => 2
[parent_id] => 1
[name] => id2
[children] => Array
(
[0] => Array
(
[id] => 5
[parent_id] => 2
[name] => id5
)
)
)
[1] => Array
(
[id] => 3
[parent_id] => 1
[name] => id3
[children] => Array
(
[0] => Array
(
[id] => 6
[parent_id] => 3
[name] => id6
)
[1] => Array
(
[id] => 8
[parent_id] => 3
[name] => id8
)
)
)
)
)
[1] => Array
(
[id] => 4
[name] => id4
[children] => Array
(
[0] => Array
(
[id] => 9
[parent_id] => 4
[name] => id9
[children] => Array
(
[0] => Array
(
[id] => 10
[parent_id] => 9
[name] => id10
)
)
)
)
)
[2] => Array
(
[id] => 7
[name] => id7
[children] => Array
(
)
)
)如果你想测试它,我把代码放在这里:http://sandbox.onlinephpfunctions.com/code/ff22978371819db8e890a404e41b046bc613b7dd
我希望我能帮上忙。祝你好运:)
发布于 2021-11-17 14:08:00
这一行:
$tree = createTree($new, array($arr[0]));仅从arr[0]创建子体列表。
要获得整个树,您需要遍历根节点列表:
foreach ($new['-'] as $root) {
$tree = createTree($new, array($root));
print_r($tree);
}https://stackoverflow.com/questions/70005461
复制相似问题