web-dev-qa-db-fra.com

PHP: instruction Limit foreach ()?

Comment puis-je limiter une instruction foreach ()? Dis que je veux seulement qu'il exécute les 2 premiers 'eaches' ou quelque chose?

32
tarnfeld

Vous pouvez soit utiliser

break;

ou

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

(la deuxième solution est encore pire)

36
Valentin Golev

Il existe de nombreuses façons, l'une consiste à utiliser un compteur:

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

Une autre façon serait de découper les 2 premiers éléments, mais ce n'est pas aussi efficace:

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

Vous pouvez également faire quelque chose comme ça (essentiellement le même que le premier foreach, mais avec for):

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

vous devez utiliser l'instruction break

il est généralement utilisé de cette façon

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

de la même manière, l'instruction continue existe si vous devez ignorer certains éléments.

18
RageZ

Dans PHP 5.5+, vous pouvez faire

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

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

Générateurs rock.

9
Tgr

c'est la meilleure solution pour moi :)

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

$i +=1;
}
6
tcgumus