您好,我有一個由父子關系組成的陣列。
$data = array(
677 => 678
678 => 679
679 => 880
880 => 881
881 => 882
882 => 883
883 => 884);
這里的值是主要文章 ID,值是那些子 ID。走這條路
$k = [];
foreach($data as $key => $val) {
$k[$key][$val] = $data[$val];
}
但我的結果是 $k
Array
(
[677] => Array
(
[678] => 679
)
[678] => Array
(
[679] => 880
)
[679] => Array
(
[880] => 881
)
[880] => Array
(
[881] => 882
)
[881] => Array
(
[882] => 883
)
[882] => Array
(
[883] => 884
)
[883] => Array
(
[884] =>
)
)
但我需要類似的東西
677 => [
678 => [
679 => [
880 => [
881 => [
882 => [
883 => [
884
]
]
]
]
]
]
]
以多種方式嘗試過,我缺少一些東西,需要有人幫助解決這個問題。在 foreach 中,僅應將剩余的陣列鍵添加為某個值的值。提前致謝
[
[677] => [
[id] => 677
[child] => [
[id] => 678
[child] => [
[id] => 679
[child] => [
[id] => 880
[child] => [
[id] => 881
[child] => [
[id] => 882
[child] => [
[id] => 883
[child] => 884
]
]
]
]
]
]
]
]
uj5u.com熱心網友回復:
因此,如果您的 ID 的順序實際上是 有序的意思,即先父在子時尚,那么您可以執行以下操作:
我們使用參考來跟蹤先前的父陣列,這使我們能夠就地編輯當前陣列。
如果前一個鍵的值與當前鍵匹配,則表示當前鍵(前一個值)有一個子鍵。我們使用它來決定它是陣列鍵還是值。
對于下一次迭代,抓住當前子陣列的參考并重復相同的步驟。
片段:
<?php
$result = [];
$prev = &$result;
foreach($data as $key => $val){
$prevKey = $prev[0] ?? -1;
if($prevKey === $key){
$prev = [ $key => [ $val ] ];
}else{
$prev[ $key ] = [ $val ];
}
$prev = &$prev[ $key ];
}
print_r($result);
在線演示
更新:
修改了id和child鍵的格式,使代碼更簡潔。
<?php
$result = [];
$prev = &$result;
foreach($data as $key => $val){
$prev = ['id' => $key, 'child' => []];
$prev = &$prev['child'];
}
$prev = ['id' => $val, 'child' => [] ];
print_r($result);
在線演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510079.html
標籤:php数组递归
