如何在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你不能这样做。 只有两种方法可以得到你想要的东西:
- 使用for循环并从位置1开始
- 使用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)
由给定的索引