【问题标题】:Increasing array elements while in foreach loop in php? [duplicate]在php的foreach循环中增加数组元素? [复制]
【发布时间】:2014-05-04 10:07:39
【问题描述】:

考虑下面的代码:

<?php
$arr = array();
$arr['b'] = 'book';
foreach($arr as $key=>$val) {
   print "key=>$key\n";
   if(!isset($arr['a']))
      $arr['a'] = 'apple';
}
?>

它没有显示“a”。 foreach 如何与哈希表(数组)一起使用,以遍历每个元素。如果列表已实现,为什么我不能在运行时添加更多?

请不要告诉我,我可以在计数的帮助下使用基于数字的索引来完成这项任务。

【问题讨论】:

  • "它没有显示'a'",什么意思?
  • @Rikesh:请找here
  • @Rikesh 见标准输出部分

标签: php arrays php-internals


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为你需要存储数组元素继续狡猾

    试试

    <?php
    $arr = array();
    $arr['b'] = 'book';
    foreach($arr as $key=>$val) {
       print "key=>$key\n";
       if(!isset($arr['a']))
          $arr['a'][] = 'apple';
    }
    print_r($arr);
    ?>
    

    【讨论】:

      【解决方案3】:

      为了能够直接修改循环内的数组元素,在$value 前加上&。在这种情况下,该值将通过引用分配。

      http://cz2.php.net/manual/en/control-structures.foreach.php

      【讨论】:

        【解决方案4】:

        试试这个:

        你会得到价值。

        <?php
        $arr = array();
        $arr['b'] = 'book';
        foreach($arr as $key=>$val) {
           print "key=>$key\n";
           if(!isset($arr['a']))
              $arr['a'] = 'apple';
        }
        
        echo '<pre>';
        print_r($arr);
        
        ?>
        

        输出:

        key=>b
        <pre>Array
        (
            [b] => book
            [a] => apple
        )
        

        【讨论】:

        • 请接受,以便其他人可以从中获得帮助 ....
        • 你读过这个问题吗?它是:为什么添加新键在循环期间没有效果(不是如何输出数组)
        • 请再读一遍问题
        【解决方案5】:

        如果要检查数组中是否存在键,请使用array_key_exists函数

        例如:

        <?php
        $arr = array();
        $arr['b'] = 'book';
        print_r($arr);          // prints Array ( [b] => book ) 
        if(!array_key_exists("a",$arr))
              $arr['a'] = 'apple';
        print_r($arr);         // prints Array ( [b] => book [a] => apple )
        ?>
        

        如果你想使用isset 条件试试这样:

        $arr = array();
        $arr['b'] = 'book';
        $flag = 0;
        foreach($arr as $key=>$val) {
           print "key=>$key\n";
           if(!isset($arr["a"]))
           {
                $flag = 1;
           }
        }
        if(flag)
        {
             $arr['a'] = 'apple';
        }
        
        print_r($arr);
        

        【讨论】:

        • 你不用check,试试去掉isset check然后运行
        【解决方案6】:

        使用for和realtime array_keys()怎么样?

        <?php
        $arr = array();
        $arr['b'] = 'book';
        
        for ($x=0;$x<count($arr); $x++) {
           $keys = array_keys($arr);
           $key = $keys[$x];
           print "key=>$key\n";
           if(!isset($arr['a']))
              $arr['a'] = 'apple';
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-07
          • 2013-10-23
          • 1970-01-01
          • 1970-01-01
          • 2012-02-15
          • 1970-01-01
          • 1970-01-01
          • 2019-03-31
          相关资源
          最近更新 更多