44

我如何限制 foreach() 语句?说我只希望它运行前 2 个“eaches”或其他什么?

4

5 回答 5

102

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

$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++) {
}
于 2009-11-01T11:55:22.090 回答
43

您可以使用

break;

或者

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

(第二种解决方案更糟糕)

于 2009-11-01T11:52:37.900 回答
25

你应该使用break语句

通常它是这样使用的

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

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

于 2009-11-01T12:02:05.777 回答
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
}

发电机摇滚。

于 2013-01-29T11:12:45.073 回答
7

这对我来说是最好的解决方案:)

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

$i +=1;
}
于 2011-11-01T10:04:05.710 回答