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

时间:2010-07-12 15:48:45

标签: php

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

7 个答案:

答案 0 :(得分:86)

保持简单。

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

请参阅手册中的continue控件结构。

答案 1 :(得分:28)

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

答案 2 :(得分:17)

您可以使用array_slice功能:

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

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

答案 3 :(得分:2)

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

  1. 使用for循环并从位置1开始
  2. 使用foreach并在实际代码周围使用if($ key&gt; 0)之类的内容
  3. 一个foreach做它的名字告诉你的事情。为每个元素做点什么:)

    编辑:好的,一个非常邪恶的解决方案出现在我的脑海里。请尝试以下方法:

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

    这将反转数组,弹出最后一个元素并再次反转它。比你没有第一个元素。

    但我建议使用其他解决方案之一。最好的将是第一个。

    还有一个变体:您可以使用array_slice():

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

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

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)

由给定的索引

答案 6 :(得分:0)

比斯米拉... 很简单,自己制作钥匙

 $keys=1;
    foreach ($namafile_doc as $value ) {
        $data['doc'.$keys]=$value;
        $keys++;
    }

希望这个答案有用