[英]PHP array to multidimensional array
我在php中有一個包含id和parent_id的對象的數組。 所有沒有parent_id的對象都應該是新數組中的根對象。
所有確實具有parent_id的對象應被推入正確的對象的子代數組中:
這是我的原始數組:
array
0 =>
object(Node)[528]
protected 'id' => int 1
protected 'parent_id' => null
1 =>
object(Node)[529]
protected 'id' => int 2
protected 'parent_id' => null
2 =>
object(Node)[530]
protected 'id' => int 3
protected 'parent_id' => 1
3 =>
object(Node)[531]
protected 'id' => int 4
protected 'parent_id' => 1
4 =>
object(Node)[532]
protected 'id' => int 5
protected 'parent_id' => 4
5 =>
object(Node)[533]
protected 'id' => int 6
protected 'parent_id' => 4
這是新數組的外觀:
$nodes = array(
array(
'id' => 1,
'parent_id' => null,
'children' => array(
array(
'id' => 3,
'parent_id' => 1,
'children' => null
),
array(
'id' => 4,
'parent_id' => 1,
'children' => array(
array(
'id' => 5,
'parent_id' => 4
),
array(
'id' => 6,
'parent_id' => 5
),
)
),
),
),
array(
'id' => 2,
'parent_id' => null,
'children' => null
),
);
知道我該怎么做嗎?
嘗試這樣的事情:
// collects all nodes that belong to a certain parent id
function findChildren($nodeList, $parentId = null) {
$nodes = array();
foreach ($nodeList as $node) {
if ($node['parent_id'] == $parentId) {
$node['children'] = findChildren($nodeList, $node['id']);
$nodes[] = $node;
}
}
return $nodes;
}
像這樣使用它:
$nestedNodes = findChildren($nodeList);
此代碼以遞歸方式在原始$nodeList
搜索給定的parent_id
。 如果找到匹配的節點,它將搜索該節點的子節點,依此類推。 如果找不到給定parent_id
子代,則重新調整一個空數組。
您可以通過使用$nodeList
引用來減少此方法的內存使用量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.