2009-11-01 41 views

Respuesta

31

También se puede usar

break; 

o

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

(la segunda solución es aún peor)

74

Hay muchas maneras, una es utilizar un contador:

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

Otra manera sería la de cortar los 2 primeros elementos, esto no es tan eficiente sin embargo:

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

También podría hacer algo como esto (básicamente la misma que la primera foreach, pero por):

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

el último sería muy lento y malo. use 1 o 2 en su lugar. – mauris

+2

La primera es la mejor, creo que – goksel

+4

también puedes usar $ k como clave, if ($ k == 2) {break; } – Ruben

13

se debe utilizar la instrucción break

por lo general es utilizar esta forma

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

de la misma manera, existe la instrucción continue si necesita omitir algunos elementos.

+1

debería ser> 2, de lo contrario se romperá antes de que ocurra algo divertido :) – phidah

+0

tks @phidah He editado ^^ – RageZ

4

esta es la mejor solución para mí :)

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

$i +=1; 
} 
8

En PHP 5.5 o superior, puede hacerlo

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

+0

Tengo 5.5.12 y me aparece el error "Llamar al límite de función indefinido()" – Marko

+1

Además del punto y coma faltante (ahora corregido) [funciona como se esperaba] (https://3v4l.org/VcqcT). – Tgr