2009-11-01 17 views

Odpowiedz

31

Można użyć

break; 

lub

foreach() if ($tmp++ < 2) { 
} 

(drugie rozwiązanie jest nawet gorzej)

74

Istnieje wiele sposobów, jedno jest użycie licznika:

$i = 0; 
foreach ($arr as $k => $v) { 
    /* Do stuff */ 
    if (++$i == 2) break; 
} 

Inny sposób byłoby pokroić 2 pierwsze elementy, to nie jest tak skuteczny, choć:

foreach (array_slice($arr, 0, 2) as $k => $v) { 
    /* Do stuff */ 
} 

Można też zrobić coś takiego (w zasadzie taki sam jak pierwszy foreach, ale z tytułu):

for ($i = 0, reset($arr); list($k,$v) = each($arr) && $i < 2; $i++) { 
} 
+9

ten ostatni byłby bardzo powolny i zły. zamiast tego użyj 1 lub 2. – mauris

+2

Pierwsza metoda jest najlepsza myślę, że – goksel

+4

możesz również użyć $ k jako klucza, jeśli ($ k == 2) {przerwa; } – Ruben

13

należy użyć instrukcji break

zwykle wykorzystują w ten sposób

$i = 0; 
foreach($data as $key => $row){ 
    if(++$i > 2) break; 
} 

na tej samej zasadzie instrukcja continue istnieje, jeśli chcesz pominąć niektóre elementy.

+1

powinno być> 2, w przeciwnym razie zostanie przerwane zanim wszystko się wydarzy :) – phidah

+0

tks @phidah Edytowałem ^^ – RageZ

4

jest najlepszym rozwiązaniem dla mnie :)

$i=0; 
foreach() if ($i < yourlimitnumber) { 

$i +=1; 
} 
8

W PHP 5.5+, można zrobić

function limit($iterable, $limit) { 
    foreach ($iterable as $key => $value) { 
     if (!$limit--) break; 
     yield $key => $value; 
    } 
} 

foreach (limit($arr, 10) as $key => $value) { 
    // do stuff 
} 

Generators skałę.

+0

Mam 5.5.12 i otrzymuję komunikat "Call to undefined function limit()" – Marko

+1

Oprócz brakującego średnika (obecnie ustalonego), [działa zgodnie z oczekiwaniami] (https://3v4l.org/VcqcT). – Tgr