2017-06-27 82 views
2

這是我的foreach代碼如何限制foreach循環

foreach ($response3["keywords"] as $genreObject) { 
      $keywords_name = $genreObject["name"]; 
      $stmt->execute(); 
     } 

什麼更好的辦法來限制循環,不這樣?

if ($i++ == 10) break; 
+1

怎麼樣的新數組array_slice($陣列,0,10); – JYoThI

回答

6

您可以限制實際陣列的循環迭代:

<?php 
foreach (array_slice($response3["keywords"], 0, 10) as $genreObject) { 
    $keywords_name = $genreObject["name"]; 
    $stmt->execute(); 
} 

或者,如果陣列是直數字索引之一,你可以使用一個for環哪個更高效:

<?php 
for ($i=0; $i<=10; $i++) { 
    $keywords_name = $response3["keywords"][$i]["name"]; 
    $stmt->execute(); 
} 
+0

哦,第一種方法比break語句更好嗎? –

+3

@JohnDoo在編程中談論「好」或「壞」是一個值得懷疑的事情。這個判斷完全取決於你所應用的標準......其中最重要的一個方面就是可讀性,因爲這是代碼重用和維護的原因。 – arkascha

1

就我個人而言,當代碼的文檔寫得很好時,我發現丟失的可讀性不成問題。你可以做到這一點。

<?php 
    $i=0; 
    while($i<10 && $keyword = $response3["keywords"][$i++];) { 
     $keywords_name = $keyword["name"]; 
     $stmt->execute(); 
    } 

它看起來並不整齊的array_slice()瓦特/ foreach循環,但這樣會導致正在進行這其實並不重要,除非它是一個特別長且重的腳本

+0

必須是'while($ i <10 && ..)',儘管同樣的錯誤在這個問題中。我假設你想要10而不是11,因爲10是一個整數。 – Adder

+0

謝謝,我修好了 –