【问题标题】:limiting number of times a loop runs in php限制循环在 php 中运行的次数
【发布时间】:2010-01-04 08:28:18
【问题描述】:

我有一个 foreach 循环,我需要将其限制为前 10 个项目,然后打破它。

我该怎么做呢?

foreach ($butters->users->user as $user) {
    $id = $user->id;
    $name = $user->screen_name;
    $profimg = $user->profile_image_url;
    echo "things";    
} 

希望有详细的解释。

【问题讨论】:

    标签: php foreach


    【解决方案1】:

    如果你想使用foreach,你可以添加一个额外的变量来控制迭代次数。例如:

    $i=0;
    foreach ($butters->users->user as $user) {
        if($i==10) break;
        $id = $user->id;
        $name = $user->screen_name;
        $profimg = $user->profile_image_url;
        echo "things";  
        $i++;  
    } 
    

    【讨论】:

    • 应该是 if($i==10) 而不是 =10。
    • 它是否能够添加一些东西,然后允许我们计算并输出列表中未显示的项目数量?就像echo "things"; 的底部一样,上面写着“还有 4 个”?
    【解决方案2】:

    您也可以使用LimitIterator

    例如

    $users = new ArrayIterator(range(1, 100)); // 100 test records
    foreach(new LimitIterator($users, 0, 10) as $u) {
      echo $u, "\n";
    }
    

    【讨论】:

      【解决方案3】:

      您可以简单地迭代 array_slice($butters->users->user, 0, 10)(前 10 个元素)。

      【讨论】:

        【解决方案4】:

        当你想退出时使用循环计数器和break

        $i = 0;
        foreach ($butters->users->user as $user) {
          $id = $user->id;
          $name = $user->screen_name;
          $profimg = $user->profile_image_url;
          echo "things";    
          if (++$i >= 10) {
            break;
          }
        } 
        

        在第 10 次迭代时,循环将在最后退出。

        这有几种变体,您需要选择的一件事是您是否要执行外循环条件。考虑:

        foreach (read_from_db() as $row) {
          ...  
        }
        

        如果您在该循环的顶部退出,您将读取 11 行。如果你在底部退出,它将是 10。在这两种情况下,循环体都执行了 10 次,但执行那个额外的函数可能是你想要的,也可能不是。

        【讨论】:

        • 这里打错了,应该是($i++ > 10)
        • 这将在第一次迭代时打破foreach 循环。
        【解决方案5】:

        如果您确定要保留foreach 循环,请添加一个计数器:

        $count = 0;
        foreach ($butters->users->user as $user) {
            $id = $user->id;
            $name = $user->screen_name;
            $profimg = $user->profile_image_url;
            echo "things";    
        
            $count++;
            if ($count == 10)
              break;
        }
        

        所以每次循环执行时,计数器都会递增,当它达到 10 时,循环就会中断。

        如果可能的话,您也可以将foreach 循环改造成for 循环。

        【讨论】:

          【解决方案6】:

          您可以在 foreach 块之前启动一个计数器,并在循环中对其进行检查,如果计数器为 10 则中断,

          $count = 1;
          foreach ($butters->users->user as $user) {
              if($count == 10)
                 break;
              $id = $user->id;
              $name = $user->screen_name;
              $profimg = $user->profile_image_url;
              echo "things";
              $count++;
          } 
          

          【讨论】:

            【解决方案7】:

            我真的很喜欢 VolkerK 的回答,但我不明白他为什么要创建一个新的迭代器,而您很可能会有一个现有的数组。只是想分享一下我最终这样做的方式。

            $arrayobject = new ArrayObject($existingArray);
            $iterator = $arrayobject->getIterator();
            
            foreach(new LimitIterator($iterator, 0, 10) as $key => $value) {
               // do something
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-11-24
              • 1970-01-01
              • 2018-06-25
              • 2014-12-07
              • 1970-01-01
              • 2012-02-25
              相关资源
              最近更新 更多