如何在PHP中的特定索引处启动foreach循环

我正在写一个不是从第0个索引开始的foreach ,而是从我的数组的第一个索引开始。 有什么办法来抵消循环的起点?

把事情简单化。

 foreach ($arr as $k => $v) { if ($k < 1) continue; // your code here. } 

一个Foreach将重置该数组:

注意:当foreach首先开始执行时,内部数组指针自动重置为数组的第一个元素。 这意味着你不需要在foreach循环之前调用reset()。

要么使用for循环(只有当这不是一个关联数组)

 $letters = range('a','z'); for($offset=1; $offset < count($letters); $offset++) { echo $letters[$offset]; } 

或者一个while循环(可以是任何数组)

 $letters = range('a','z'); next($letters); while($letter = each($letters)) { echo $letter['value']; } 

或与一个LimitIterator

 $letters = new LimitIterator(new ArrayIterator(range('a','z')), 1); foreach($letters as $letter) { echo $letter; } 

它可以让你指定起始偏移量并通过构造函数计数。

以上所有将输出字母b到z而不是a到z

你可以使用array_slice函数:

 $arr = array(); // your array foreach(array_slice($arr, 1) as $foo){ // do what ever you want here } 

当然,你可以使用任何偏移值你想要的。 在这种情况下, 1 '跳过'数组的第一个元素。

在一个foreach你不能这样做。 只有两种方法可以得到你想要的东西:

  1. 使用for循环并从位置1开始
  2. 使用foreach,并在你的实际代码周围使用if($ key> 0)

一个foreach是什么名字告诉你的。 为每个元素做点什么:)

编辑 :好的,一个非常邪恶的解决scheme来到我的脑海。 尝试以下操作:

 foreach(array_reverse(array_pop(array_reverse($array))) as $key => $value){ ... } 

这将颠倒arrays,popup最后一个元素,并将其反转。 除了第一个元素之外,你将拥有一个元素。

但我会build议使用其他解决scheme之一。 最好的将是第一个。

还有一个变种:你可以使用array_slice()来做到这一点:

 foreach(array_slice($array, 1, null, true) as $key => $value){ ... } 

但是,您应该使用所有三个参数来保持您的foreach循环的数组的键:

看起来像一个for循环将是更好的方式去这里,但如果你认为你必须使用foreach,你可以将第一个元素从数组中移出,然后重新取消它:

 $a = array('foo','bar'); $temp = array_shift($a); foreach ( $a as $k => $v ) { //do something } array_unshift($a, $temp); 

那么没有人说,但如果你不介意改变数组,如果我们想从给定数组的第二个元素开始:

 unset($array[key($array)]); foreach($array as $key=>$value) { //do whatever } 

如果你不介意,只需添加,

 $saved = $array; unset($array[key($array)]); foreach($array as $key=>$value) { //do whatever } $array = $saved; 

此外,如果你想跳过一个已知的指数,只需要补充

 key($array) 

由给定的索引