我有
`<?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;
}
`
我的問題是如何將陣列串列寫入陣列,但就像一棵樹我設法做第一個家庭。
所以我的問題是這個遞回操作在第一個 'parent_id'=> '-' 之后不會重復,它不會轉到其他 parent_id 想要獲得任何解釋幫助。
uj5u.com熱心網友回復:
此解決方案可以幫助您。
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
我希望我是有用的。祝你好運 :)
uj5u.com熱心網友回復:
這一行:
$tree = createTree($new, array($arr[0]));
只創建從arr[0].
要獲取整棵樹,您需要遍歷根節點串列:
foreach ($new['-'] as $root) {
$tree = createTree($new, array($root));
print_r($tree);
}
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/359893.html
下一篇:如何遞回訪問物件值?
