限制循环在php中运行的次数

时间:2010-01-04 08:28:19

标签: php foreach

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

我怎么会这样做?

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

也希望得到详细的解释。

7 个答案:

答案 0 :(得分:38)

如果要使用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++;  
} 

答案 1 :(得分:15)

您还可以使用LimitIterator

e.g。

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

如果要退出,请使用循环计数器和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次,但是执行该额外功能可能是你想要的,也可能不是。

答案 4 :(得分:1)

如果您确定要保留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循环。

答案 5 :(得分:1)

你可以在你的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++;
} 

答案 6 :(得分:0)

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

$arrayobject = new ArrayObject($existingArray);
$iterator = $arrayobject->getIterator();

foreach(new LimitIterator($iterator, 0, 10) as $key => $value) {
   // do something
}