为什么下面的代码不能像我预期的那样工作?
<?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);
预期结果:
Array(
[Area1] => Array(
[Section1] => Array(
[0] => Location1
)
)
[Area2] => Array(
[Section2] => Array(
[0] => Location2
)
)
)
实际结果:
Array(
[Area1] => Array(
[Section2] => Array(
[0] => Location2
)
)
[Area2] => Array(
[Section2] => Array(
[0] => Location2
)
)
)
最佳答案
如果您按如下两行修改代码:
$area = array();
$section = array();
为此:
unset($area);
$area = array();
unset($section);
$section = array();
它将按预期工作。
在第一个版本中,$area
和 $section
充当指向 $root
数组中值的“指针”。如果您先重置值,这些变量随后可用于创建全新的数组,而不是覆盖以前的数组。
关于PHP、数组和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42876/