我正在编写一个 foreach,它不是从第0个索引开始,而是从数组的第一个索引开始。有什么办法可以抵消循环的起点吗?
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 循环保留数组的键:
你可以使用 array_slice函数:
array_slice
$arr = array(); // your array foreach(array_slice($arr, 1) as $foo){ // do what ever you want here }
当然,您可以使用任何您想要的偏移量值。在本例中,1“跳过”数组的第一个元素。
1
看起来 for 循环会是更好的方法,但是如果你认为你必须使用 foreach,你可以将第一个元素从数组中移除,并将它取消移回:
$a = array('foo','bar'); $temp = array_shift($a); foreach ( $a as $k => $v ) { //do something } array_unshift($a, $temp);
简单点。
foreach ($arr as $k => $v) { if ($k < 1) continue; // your code here. }
请参阅手册中的 continue控制结构。
continue
Foreach将重置数组:
Foreach
注意: 当 foreach 第一次开始执行时,内部数组指针会自动重置为数组的第一个元素。这意味着在 foreach 循环之前不需要调用 set ()。
要么使用 for循环(只有当它是 没有关联数组时)
for
$letters = range('a','z'); for($offset=1; $offset < count($letters); $offset++) { echo $letters[$offset]; }
或者 while循环(可以是任意数组)
while
$letters = range('a','z'); next($letters); while($letter = each($letters)) { echo $letter['value']; }
或者 LimitIterator
LimitIterator
$letters = new LimitIterator(new ArrayIterator(range('a','z')), 1); foreach($letters as $letter) { echo $letter; }
它允许您通过构造函数指定开始偏移量和计数。
以上所有代码都将输出字母 b 到 z,而不是 a 到 z
没有人说过但是如果你不介意改变数组如果我们想从给定数组的第二个元素开始:
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++; }
希望这个答案有用