【发布时间】:2011-03-14 21:08:43
【问题描述】:
我正在编写一个foreach,它不是从第 0 个索引开始,而是从数组的第一个索引开始。有什么办法可以抵消循环的起点吗?
【问题讨论】:
-
用FOR代替会不会更好?
-
在 foreach 循环中处理键值对要容易得多,我想这就是他想要进行 foreach 的原因。或者他甚至有一个 foreach 并且不想更改很多代码。
标签: php
我正在编写一个foreach,它不是从第 0 个索引开始,而是从数组的第一个索引开始。有什么办法可以抵消循环的起点吗?
【问题讨论】:
标签: php
【讨论】:
if ($k == $firstIndex) continue; where $firstIndex = 0; 在数字索引的情况下或$firstIndex = 'myFirstKeyIndex'; 在关联数组的情况下怎么样?
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
【讨论】:
你可以使用array_slice函数:
$arr = array(); // your array
foreach(array_slice($arr, 1) as $foo){
// do what ever you want here
}
当然,您可以使用任何您想要的偏移值。在这种情况下,1“跳过”数组的第一个元素。
【讨论】:
在 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 循环保留数组的键:
【讨论】:
似乎 for 循环会是更好的方法,但如果您认为必须使用 foreach,您可以将第一个元素移出数组并将其重新移回:
$a = array('foo','bar');
$temp = array_shift($a);
foreach ( $a as $k => $v ) {
//do something
}
array_unshift($a, $temp);
【讨论】:
$k => $v 语法仅适用于关联数组。对于索引数组,您只需要$a as $v。
好吧,没有人说,但如果你不介意改变数组,如果我们想从给定数组的第二个元素开始:
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)
根据给定的索引
【讨论】:
比斯米拉... 很简单,只需制作自己的钥匙
$keys=1;
foreach ($namafile_doc as $value ) {
$data['doc'.$keys]=$value;
$keys++;
}
这个答案可能有用吗
【讨论】: