PHP, tableaux et références
Question
Pourquoi le code suivant ne fonctionne-t-il pas comme je l'attendais ?
<?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);
Résultat attendu:
Array(
[Area1] => Array(
[Section1] => Array(
[0] => Location1
)
)
[Area2] => Array(
[Section2] => Array(
[0] => Location2
)
)
)
Résultat actuel:
Array(
[Area1] => Array(
[Section2] => Array(
[0] => Location2
)
)
[Area2] => Array(
[Section2] => Array(
[0] => Location2
)
)
)
La solution
Si vous modifiez votre code sur deux lignes comme suit :
$area = array();
$section = array();
pour ça:
unset($area);
$area = array();
unset($section);
$section = array();
cela fonctionnera comme prévu.
Dans la première version, $area
et $section
agissent comme des "pointeurs" vers la valeur à l'intérieur du $root
tableau.Si vous réinitialisez d'abord les valeurs, ces variables peuvent ensuite être utilisées pour créer de nouveaux tableaux au lieu d'écraser les tableaux précédents.
Autres conseils
Cela fonctionnera également :
$root[$row[0]] = array();
$area =& $root[$row[0]];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow