2011-07-22 123 views
1

我想跳過一個foreach循環的迭代次數。跳過foreach期間的迭代次數

我有這段代碼;

$myarray = array("a","b","c","d","e","f","g","h"); 
    $skip = 5; 
    foreach($myarray as $key => $letter){ 
     if($key < $skip){ 
      $key = $skip; 
     } 
     echo $letter; 
    } 

這段代碼沒有辦法。但有了它,我可以解釋我想要的東西。我真的要移動下一個迭代的指針。它認爲通過修改我想要的密鑰的價值就足夠了。我明白可能的解決方案就是這個。

$myarray = array("a","b","c","d","e","f","g","h"); 
    $skip = 5; 
    foreach($myarray as $key => $letter){ 
     if($key < $skip){ 
      continue; 
     } 
     echo $letter; 
    } 

但是,有點還是做了迭代步驟。我想完全跳過迭代。

感謝

+0

你不能用foreach做它,你必須使用常規循環,這不是你想要的,我想你的標題... – Paulpro

+0

IT打印fgh,這意味着它是跳過 –

回答

1

你可以只使用一個for循環,而不是

編輯:

for($i = $skip; $skip > 0, $i < count($myarray); $i++) { 
    // do some stuff 
} 
+1

咦?這給出-1。 'for($ i = 5; $ i rabudde

+0

好的,編輯謝謝。 –

0

這不是真的怎麼foreach環(和迭代一般)工作。

你既可以做continue版本(工作正常;如果它是循環體中的第一件事物,它本質上是相同的),或者你可以構造一個不同的數組來迭代,不包括第一個元素,或者您可以使用常規的for循環。

2

參見:array_slice

$myarray = array("a","b","c","d","e","f","g","h"); 
foreach(array_slice($myarray, 5) as $key => $letter){ 
    echo $letter; 
} 
0
foreach (array_slice($myarray, 5) as $key => $letter) { 
[...] 
} 
+0

咦? 'fgh'似乎完全是受人尊敬的結果,因爲這與海報公認的解決方案的結果是一樣的嗎? – rabudde

0
<?php 

$myarray = array("a","b","c","d","e","f","g","h"); 
    $skip = 5; 
    $index = 0 ; 
    foreach($myarray as $key => $letter){ 
     if(($index % $skip) == 0){ 
      echo $letter; 
     }  
     $index++; 

    } 

?> 
0
$myarray = array("a","b","c","d","e","f","g","h"); 

foreach (new LimitIterator (new ArrayIterator ($myarray), 5) as $letter) 
{ 
     echo $letter; 
} 
0

您可以致電$array->next(),致電$skip次。有些情況下,您無法輕鬆使用常規的for循環:例如,迭代DatePeriod對象時。