2014-02-20 297 views
9

我有一个对象数组,PHP中的任何数组。 我如何跳过foreach迭代中的最后一个元素?PHP:如何跳过foreach循环中的最后一个元素

+4

'if $ element == end($ myarray)break' – sashkello

+0

在foreach之前使用array_pop() – PravinS

+0

@sashkello如果数组中有重复的元素,或者当有元素计算为相同的值时,会给出不希望的结果作为最后一个。 –

回答

11

使用一个变量来跟踪多少元素到目前为止迭代,并切断回路,当它到达终点:

$count = count($array); 

foreach ($array as $key => $val) { 
    if (--$count <= 0) { 
     break; 
    } 

    echo "$key = $val\n"; 
} 

如果你不关心的内存,你可以遍历数组的缩短副本:

foreach (array_slice($array, 0, count($array) - 1) as $key => $val) { 
    echo "$key = $val\n"; 
} 
+0

我不知道为什么它觉得它是一个坏的问题,但这当然是我问的。我想遍历所有内容,但是排除数组中的最后一个元素..谢谢 – muffin

+2

@muffin问题是为什么最后一个元素应该排除在第一位......如果这个值有特殊的含义,不要在那里。 –

0
$count = count($array); 
$i=0; 
foreach ($arr as &$value) 
{ 
    $i++; 
    if($i==($count-1)) 
    { 
     echo 'skip'; 
    } 
    else 
    { 
     echo $value; 
    } 
} 
+0

如果键是字符串,则不起作用。 –

+0

@jack okk比我编辑我的答案.. :) –

+0

干脆这样做:for($ i = 0; $ i <$ count-1; $ i ++) –

0

你所要做的将会挫败foreach循环的目的。它意味着循环遍及整个阵列并使我们的工作变得轻松。

例如:您可以使用COUNT在PHP函数获取数组的大小,然后可以使用循环并设置限制ARRAYSIZE-2,所以最后阵列将被省略

2

如果你不”不想删除与流行音乐的最后一个数组项,你可以跳过像这样

$array = array('v1','v2','v3',...) 

$counter = 1; 

foreach($array as $value) 
{ 
    //do your thing in loop 

    if($counter == count($array)) continue; // this will skip to next iteration if last element encountered. 
    $counter++; 
} 
3

有多种方法可以做到这一点。

如果阵列是按顺序零索引数组,你可以这样做:

for($i = 0, $ilen = count($array) - 1; $i < $ilen; $i++) 
{ 
    $value = $array[ $i ]; 

    /* do something with $value */ 
} 

如果阵列是一个关联数组,或以其他方式不按顺序零索引,你可以这样做:

$i = 0; 
$ilen = count($array); 
foreach($array as $key => $value) 
{ 
    if(++$i == $ilen) break; 

    /* do something with $value */ 
} 
+0

这也是一个很好的答案..upvote谢谢:) – muffin

+0

@muffin不客气。正如你从其他答案中看到的那样,有很多方法可以实现你的目标。 –

相关问题