考虑下面的代码:
<?php
$arr = array();
$arr['b'] = 'book';
foreach($arr as $key=>$val) {
print "key=>$key\n";
if(!isset($arr['a']))
$arr['a'] = 'apple';
}
?>
它不显示“a”。 foreach 如何与哈希表(数组)一起工作,以遍历每个元素。如果列表已实现,为什么我不能在运行时添加更多列表?
请不要告诉我我可以在计数的帮助下使用基于数字的索引来完成这项任务。
Foreach 在循环之前复制数组结构(read more),因此您不能更改数组结构并等待循环内的新元素。您可以使用 while
而不是 foreach
。
$arr = array();
$arr['b'] = 'book';
reset($arr);
while ($val = current($arr))
{
print "key=".key($arr).PHP_EOL;
if (!isset($arr['a']))
$arr['a'] = 'apple';
next($arr);
}
或者对foreach使用ArrayIterator
,因为ArrayIterator不是数组。
$arr = array();
$arr['b'] = 'book';
$array_iterator = new ArrayIterator($arr);
foreach($array_iterator as $key=>$val) {
print "key=>$key\n";
if(!isset($array_iterator['a']))
$array_iterator['a'] = 'apple';
}