PHP,数组和引用
时间:2020-03-05 18:47:23 来源:igfitidea点击:
为什么以下代码无法按我预期的那样工作?
<?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数组中值的"指针"。如果先重置这些值,则可以将这些变量用于创建全新的数组,而不必覆盖以前的数组。
回答
这也将起作用:
$root[$row[0]] = array(); $area =& $root[$row[0]];