2009-11-01 10 views

risposta

31

è possibile utilizzare

break; 

o

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

(la seconda soluzione è ancora peggio)

74

Ci sono molti modi, uno è quello di utilizzare un contatore:

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

Altra via sarebbe quello di tagliare i primi 2 elementi, questo non è così efficiente, anche se:

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

Si potrebbe anche fare qualcosa di simile (fondamentalmente lo stesso del primo foreach, ma con la):

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

l'ultimo sarebbe molto lento e cattivo. utilizzare 1 o 2 invece. – mauris

+2

Il primo modo è il migliore penso che sia – goksel

+4

puoi anche usare $ k come chiave, if ($ k == 2) {break; } – Ruben

13

si dovrebbe utilizzare l'istruzione break

Di solito è usare questo modo

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

allo stesso modo esiste l'istruzione continue se è necessario saltare alcuni elementi.

+1

dovrebbe essere> 2, altrimenti si romperà prima che succeda qualcosa di divertente :) – phidah

+0

tks @phidah Ho modificato ^^ – RageZ

4

questa è la soluzione migliore per me :)

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

$i +=1; 
} 
8

In PHP 5.5 +, si può fare

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 roccia.

+0

Ho 5.5.12 e ottengo l'errore "Chiama per limite funzione non definito()" – Marko

+1

A parte il punto e virgola mancante (ora risolto) funziona [come previsto] (https://3v4l.org/VcqcT). – Tgr