Ich habe eine Funktion geschrieben, um ein Single-Dimension-Array (Adjazenzliste) in ein multidimensionales Array zu konvertieren. Ich versuche, einen aufgezählten Pfad in $ aCat zu injizieren.Geben Sie den nummerierten Pfad in foreach ein> single to multi-dimensional array
Quelle (eindimensional)
[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
)
Ich habe die folgende Funktion, dies zu multidimensionalen erweitern aus.
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;
}
Dies ist das Ergebnis. Perfekt bis jetzt.
[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()
Wie beende ich oben mit:
[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()
Prost Eduardo. Ich habe es ähnlich versucht, aber am Ende habe ich ein merkwürdiges Verhalten bei etwa 4 Stufen. Die "parent_id" wird nicht an einige der Pfade angehängt. – supert3d
@ supert3d Ich habe es ohne Probleme bis zu 6 Ebenen getestet. –
Könnte es einen anderen Grund geben? Doppelte IDs? Ändern des resultierenden Arrays, um die Umgebung genauer widerzuspiegeln. – supert3d