我正在写一个foreach
,它不是从第0个索引开始,而是从我的数组的第一个索引开始。有没有办法抵消循环的起点?
答案 0 :(得分:86)
答案 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'];
}
$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你不能这样做。只有两种方法可以得到你想要的东西:
一个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++;
}
希望这个答案有用