我有一个foreach循环,我需要限制前10个项目然后突破它。
我怎么会这样做?
foreach ($butters->users->user as $user) {
$id = $user->id;
$name = $user->screen_name;
$profimg = $user->profile_image_url;
echo "things";
}
也希望得到详细的解释。
答案 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
}