1
我已经编写了一个将单维数组(邻接列表)转换为多维数组的函数。我试图将枚举路径注入$ aCat。将枚举路径注入到foreach中>单维数组到多维数组
源(一维)
[2] => Array
(
[id] => 2
[parent_id] => 0
[name] => Cat 1
)
[45] => Array
(
[id] => 45
[parent_id] => 2
[name] => Cat 2
)
[46] => Array
(
[id] => 46
[parent_id] => 2
[name] => Cat 4
)
[47] => Array
(
[id] => 47
[parent_id] => 2
[name] => Cat 5
)
[10] => Array
(
[id] => 10
[parent_id] => 45
[name] => Cat 3
)
我有以下功能扩展了这一点多维。
function fnExpandArray($aData){
$aNested = array();
foreach($aData as &$aCat){
if(isset($aData[$aCat['parent_id']])){
$aData[$aCat['parent_id']]['sub'][$aCat['id']] = &$aCat;
} else {
$aNested[$aCat['id']] = &$aCat;
}
}
unset($aCat);
return $aNested;
}
这就是结果。到目前为止完美。
[2] => Array
(
[id] => 2
[parent_id] => 0
[name] => Cat 1
[sub] => Array
(
[45] => Array
(
[id] => 45
[parent_id] => 2
[name] => Cat 2
[sub] => Array
(
[10] => Array
(
[id] => 10
[parent_id] => 45
[name] => Cat 3
[sub] => Array()
)
)
)
[46] => Array
(
[id] => 46
[parent_id] => 2
[name] => Cat 4
[sub] => Array()
)
[47] => Array
(
[id] => 47
[parent_id] => 2
[name] => Cat 5
[sub] => Array()
我如何结束:
[2] => Array
(
[id] => 2
[parent_id] => 0
[name] => Cat 1
[path] => 2
[sub] => Array
(
[45] => Array
(
[id] => 45
[parent_id] => 2
[name] => Cat 2
[path] => 2_45
[sub] => Array
(
[10] => Array
(
[id] => 10
[parent_id] => 45
[name] => Cat 3
[path] => 2_45_10
[sub] => Array()
)
)
)
[46] => Array
(
[id] => 46
[parent_id] => 2
[name] => Cat 4
[path] => 2_46
[sub] => Array()
)
[47] => Array
(
[id] => 47
[parent_id] => 2
[name] => Cat 5
[path] => 2_47
[sub] => Array()
干杯爱德华多。我尝试过类似的方式,但最终我在大约4级的时候出现了奇怪的行为。 “parent_id”没有被预先附加到某些路径。 – supert3d
@ supert3d我对它进行了6级深度测试,没有任何问题。 –
难道还有其他原因吗?重复的ID?修改结果数组以更准确地反映环境。 – supert3d