web-dev-qa-db-ja.com

PHP:foreach()ステートメントを制限しますか?

Foreach()ステートメントを制限するにはどうすればよいですか?最初の2つの「各」または何かを実行したいだけですか?

32
tarnfeld

どちらかを使用できます

break;

または

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

(2番目の解決策はさらに悪いです)

36
Valentin Golev

多くの方法がありますが、1つはカウンターを使用することです。

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

他の方法は最初の2つの要素をスライスすることですが、これは効率的ではありません:

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

次のようなこともできます(基本的に最初のforeachと同じですが、forを使用):

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

break ステートメントを使用する必要があります

通常、この方法を使用します

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

同様に、いくつかの項目をスキップする必要がある場合は continue ステートメントが存在します。

18
RageZ

PHP 5.5+では、次のことができます

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

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

発電機 ロック。

9
Tgr

これは私にとって最良の解決策です:)

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

$i +=1;
}
6
tcgumus