我有以下陣列:
[
12 => ['parent_id' => null],
13 => ['parent_id' => 12],
14 => ['parent_id' => 12],
15 => ['parent_id' => 12],
16 => ['parent_id' => 13],
17 => ['parent_id' => 13],
18 => ['parent_id' => 12],
19 => ['parent_id' => 16],
20 => ['parent_id' => 18],
21 => ['parent_id' => 20],
22 => ['parent_id' => 20],
]
我正在嘗試通過 key(id) 遞回地獲取所有孩子:例如 13 只想獲取[16, 17, 19]18 - [20, 21, 22]。
每個節點都有一個或多個子節點。
我正在嘗試獲取這樣的專案,但無法正常作業:
function getRecursiveChildren($id, $items, $kids = [])
{
foreach ($items as $key => $item) {
if ($item['parent_id'] === $id) {
$kids[] = $this->getRecursiveChildren($id, $items, $kids);
}
}
return $kids;
}
有人可以為此提供幫助或暗示或提供正確的解決方案嗎?謝謝!
uj5u.com熱心網友回復:
function getRecursiveChildren($id, $items): array
{
$kids = [];
foreach ($items as $key => $item) {
if ($item['parent_id'] === $id) {
$kids[] = $key;
array_push($kids, ...getRecursiveChildren($key, $items));
}
}
return $kids;
}
如果順序對您很重要,您可以訂購陣列
uj5u.com熱心網友回復:
$data = [
12 => [ 'parent_id' => null ],
13 => [ 'parent_id' => 12 ],
14 => [ 'parent_id' => 12 ],
15 => [ 'parent_id' => 12 ],
16 => [ 'parent_id' => 13 ],
17 => [ 'parent_id' => 13 ],
18 => [ 'parent_id' => 12 ],
19 => [ 'parent_id' => 16 ],
20 => [ 'parent_id' => 18 ],
21 => [ 'parent_id' => 20 ],
22 => [ 'parent_id' => 20 ]
];
function search(array $arr, int $parentId): array {
$keys = array_keys(array_filter($arr, fn($value) => $value['parent_id'] === $parentId));
foreach ($keys as $key) {
$keys = array_merge($keys, search($arr, $key));
}
return $keys;
}
$result = search($data, 18);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/422780.html
標籤:
上一篇:一個串列可以拆分多少次以使左側的每個元素都小于右側的每個元素?
下一篇:求凸多邊形的最小面積矩形
