【问题标题】:Using next in foreach loop在 foreach 循环中使用 next
【发布时间】:2013-07-31 12:36:28
【问题描述】:

我正在使用 foreach 遍历一个数组。

在特定情况下,我需要在迭代之前知道下一个元素的值(如预测)。为此,我打算使用函数next()

在文档中,我刚刚注意到 next() 将内部数组指针向前推进。

next() 的行为类似于 current(),但有一点不同。它推进了 内部数组指针在返回元素之前前移一位 价值。这意味着它返回下一个数组值并推进 内部数组指针加一。

如果是这样会影响我的 foreach 循环吗?

【问题讨论】:

    标签: php arrays foreach next


    【解决方案1】:

    next() 影响foreach(),句号。

    至少在 PHP 7.2 中,

    $values = ['a', 'b', 'c', 'd', 'e'];
    
    foreach ($values as $value) {
      next($values);
      $two_ahead = next($values);
      echo("Two ahead: $two_ahead\n");
      echo("Current value: $value\n");
    }
    

    生产:

    Two ahead: c
    Current value: a
    Two ahead: e
    Current value: b
    Two ahead: 
    Current value: c
    Two ahead: 
    Current value: d
    Two ahead: 
    Current value: e
    

    还要注意 foreach 循环也不影响 next 的位置。他们是独立的。

    如果您有一个带有连续数字键的数组(默认),那么ops' answer 最适合您想要做的事情。我只是回答了这个问题。

    【讨论】:

      【解决方案2】:

      它不会影响你的循环 如果你这样使用它

      <?php
      
      $lists = range('a', 'f');
      
      foreach($lists as &$value) {
         $next = current($lists);
         echo 'value: ' . $value . "\n" . 'next: ' . $next . "\n\n";
      }
      

      输出

      值:a 下一个:b

      值:b 下一个:c

      值:c 下一个:d

      值:d 下一个:e

      值:e 下一个:f

      值:f 下一个:

      【讨论】:

      • 很棒的发现。我希望它稳定且向前兼容。是的,它很有用。 :-)
      • 应该$next = current($lists);$next = next($lists); 吗?
      • 不,不是,你可以把这段代码运行到你本地的php环境中试试
      • @e-motiv 这不是稳定且向前兼容的。 它甚至不是向后兼容的。正如sandbox.onlinephpfunctions.com 测试的那样,这始终将“a”声明为 PHP 5.0.4 到 5.1.6 中的下一个。然后从 5.2.16 到 5.6.29 它的“b”、“c”、“d”、“e”、“f”(所以你的输出)和从 7.0.1 开始它保持“a”。正如grokbase.com/t/php/php-internals/13bjdgjhcz/…中指出的foreachcurrent彼此无关。
      【解决方案3】:

      试试这个代码:

      $a=$array();
      foreach($a as $key=>$var)
      {
         if(isset($a[$key+1]))
            echo $a[$key+1];//next element
      }
      

      【讨论】:

      • 这假定具有连续键的整数索引数组,当然 PHP 中的数组也不需要。如果您希望安全地将此方法用于未知数组或非整数键,则迭代 array_values($a) 的结果。
      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 2017-10-19
      • 2013-12-26
      • 2015-09-23
      • 2018-04-30
      • 1970-01-01
      相关资源
      最近更新 更多