【问题标题】:PHP: Limit foreach() statement? [closed]PHP:限制 foreach() 语句? [关闭]
【发布时间】:2010-12-12 00:49:10
【问题描述】:

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

【问题讨论】:

    标签: php foreach limit


    【解决方案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++) {
    }
    

    【讨论】:

    • 最后一个会很慢而且很糟糕。请改用 1 或 2。
    • 第一种方式是我认为最好的
    • 你也可以使用$k作为key,if($k == 2) { break; }
    • if (++$i == 2) break; 这真是太棒了;)节省我很多时间。非常感谢@reko_t
    • 我用这个:if (++$i == 12) break;但我想加载我所有的 50 个项目,但是在每 12 个项目显示等待 2 秒然后 12 加载再次等待 2 秒再次加载.. 请给我一个解决方案
    【解决方案2】:

    你可以使用

    break;
    

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

    (第二种方案更糟糕)

    【讨论】:

    • 它适用于 2 个第一个元素,如何获取最后 100 个元素?
    • 我自己得到了答案。我正在使用array_slice 获取特定计数的最后一个元素。这是我对数组 array_slice($a,-100,100) 的最后 100 个元素的代码
    【解决方案3】:

    您应该使用break 语句

    一般都是这样用的

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

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

    【讨论】:

    • 应该 > 2,否则它会在有趣的事情发生之前中断:)
    【解决方案4】:

    在 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
    }
    

    Generators摇滚。

    【讨论】:

    • 我有 5.5.12,我收到错误“调用未定义函数 limit()”
    • 除了缺少的分号(现在已修复)它works as expected
    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 2016-12-27
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多