2014-02-20 294 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不客氣。正如你從其他答案中看到的那樣,有很多方法可以實現你的目標。 –

相關問題