PHP:限制foreach()语句?

tar*_*eld 34 php foreach limit

我如何限制foreach()语句?说我只想要它运行前2''eaches'或者什么?

rek*_*o_t 86

有很多方法,一种是使用计数器:

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

其他方式是切片前2个元素,但效率不高:

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

你也可以做这样的事情(基本上与第一个foreach相同,但是为了):

for ($i = 0, reset($arr); list($k,$v) = each($arr) && $i < 2; $i++) {
}
Run Code Online (Sandbox Code Playgroud)

  • 最后一个会非常缓慢和糟糕.改用1或2. (9认同)
  • 如果($ k == 2){break;你也可以使用$ k作为键.} (4认同)
  • 第一种方式是我认为最好的方法 (2认同)

Val*_*lev 38

你可以使用

break;
Run Code Online (Sandbox Code Playgroud)

要么

foreach() if ($tmp++ < 2) {
}
Run Code Online (Sandbox Code Playgroud)

(第二种解决方案更糟)


Rag*_*geZ 18

你应该使用break语句

通常它是这样使用的

$i = 0;
foreach($data as $key => $row){
    if(++$i > 2) break;
}
Run Code Online (Sandbox Code Playgroud)

以相同的方式,如果您需要跳过某些项目,则存在continue语句.

  • 应该&gt; 2,否则它会在有趣的事情发生之前中断:) (2认同)

Tgr*_*Tgr 9

在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
}
Run Code Online (Sandbox Code Playgroud)

发电机摇滚.


小智 6

这对我来说是最好的解决办法:)

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

$i +=1;
}
Run Code Online (Sandbox Code Playgroud)