PHP, Arrays und Referenzen
Frage
Warum funktioniert der folgende Code nicht wie erwartet?
<?php
$data = array(
array('Area1', null, null),
array(null, 'Section1', null),
array(null, null, 'Location1'),
array('Area2', null, null),
array(null, 'Section2', null),
array(null, null, 'Location2')
);
$root = array();
foreach ($data as $row) {
if ($row[0]) {
$area = array();
$root[$row[0]] =& $area;
} elseif ($row[1]) {
$section = array();
$area[$row[1]] =& $section;
} elseif ($row[2]) {
$section[] = $row[2];
}
}
print_r($root);
Erwartetes Ergebnis:
Array(
[Area1] => Array(
[Section1] => Array(
[0] => Location1
)
)
[Area2] => Array(
[Section2] => Array(
[0] => Location2
)
)
)
Tatsächliche Ergebnis:
Array(
[Area1] => Array(
[Section2] => Array(
[0] => Location2
)
)
[Area2] => Array(
[Section2] => Array(
[0] => Location2
)
)
)
Lösung
Wenn Sie Ihren Code in zwei Zeilen wie folgt ändern:
$area = array();
$section = array();
dazu:
unset($area);
$area = array();
unset($section);
$section = array();
es wird wie erwartet funktionieren.
In der ersten Version $area
Und $section
fungieren als „Zeiger“ auf den Wert innerhalb der $root
Array.Wenn Sie die Werte zuerst zurücksetzen, können diese Variablen dann zum Erstellen völlig neuer Arrays verwendet werden, anstatt die vorherigen Arrays zu überschreiben.
Andere Tipps
Das wird auch funktionieren:
$root[$row[0]] = array();
$area =& $root[$row[0]];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow