php - 在 php 中的 foreach 循环中增加数组元素?

标签 php arrays php-internals

<分区>

考虑下面的代码:

<?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';
}

关于php - 在 php 中的 foreach 循环中增加数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653657/

相关文章:

c - 如何在 C 中构建字符串数组

php - 使用 'new' 实例化时到底发生了什么?

php - 如何使用 Microsoft Visual C++ 2008 编译 PHP 扩展?

php - 在运行时动态获取 PHP 操作码

php - 如何使用 NGINX、PHP-FPM 在 docker-compose.yml 文件中加载 mysqli 扩展

php - 在 PHP 中使用 session ID 作为文件名是否安全?

java - 将 ArrayList<double[][]> 转换为 double[][]

JavaScript:调用外部函数时调用 Array.reduce,并且外部函数有参数

php - mysql_query 不返回数据

php - Kohana v3.1.0 ORM _ignored_columns -- 现在它不见了,我应该怎么做?