foreach — ограничение количества циклов в переполнении стека

У меня есть цикл foreach, который мне нужно ограничить первыми 10 пунктами, а затем выйти из него.

Как бы я сделал это здесь?

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

Буду признателен за подробное объяснение.

9

Решение

Если вы хотите использовать 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++;
}
38

Другие решения

Вы также можете использовать LimitIterator.

например

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

Вы можете просто перебрать array_slice($butters->users->user, 0, 10) (первые 10 элементов).

3

Используйте счетчик циклов и 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 раз, но выполнение этой дополнительной функции может быть тем, что вы хотите, а может и нет.

2

Если вы уверены, что хотите сохранить 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 цикл, если это возможно.

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++;
}
1

Мне очень нравится ответ VolkerK, но я не понимаю, почему он создает новый итератор, когда, скорее всего, у вас будет существующий массив. Просто хочу поделиться тем, как я это сделал.

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

foreach(new LimitIterator($iterator, 0, 10) as $key => $value) {
// do something
}
0
По вопросам рекламы [email protected]