@bkistav

Как повторять цикл foreach с шагом?

Здравствуйте.

Есть конструкция:
$start = 0;
$end = 10;
foreach($names as $name) if($start++ <= $end) {
}


Мне необходимо повторять цикл от 0 до 500 раз. Каждый раз цикл должен проходить 10 итераций, затем еще 10 и т.д.
т.е. от 0 до 10-ти, затем от 10-ти до 20, от 20 до 30-ти... и так до 500.

Вопрос: как реализовать подобное действо?
  • Вопрос задан
  • 3294 просмотра
Пригласить эксперта
Ответы на вопрос 5
AloneCoder
@AloneCoder
[object Object]
так?
for($iteration=0;$iteration<=500;$iteration+=10) {
foreach($names as $name) { }
}
Ответ написан
EagleMoor
@EagleMoor
PHP Yii2 RESTful API Developer
Как я понял, нужно ловить тот момент, когда число становится кратно 10

$i = 0;
foreach ($items as $item) {
    if (!($i % 10)) {
        // Кратно 10  (10, 20, 30, ... 500)
    } else {
        // Не кратно 10, обычное число
    }
    $i++;
}
Ответ написан
Комментировать
Или, может быть, так? :-)
for($i = 0; $i < 500; $i += 10) {
	for($j = $i; $j < $i + 10 && $j < 500; $j++) {
		$name = $names[$j];
		# ...
	}
	# ...
}
Ответ написан
@pudovMaxim
web-developer
Похоже на пагинацию. А сколько значений в $names? Может удобней сделать по типу:
for($i = 0; $i < 500; $i += 10) {
	for($j = $i; $j < $i + 10 && $j < 500; $j++) {
               list($index, $name) = each($names);
        }
}

Что-то в этом духе
Ответ написан
Комментировать
надеюсь я правильно понял вопрос =)
$names = range(1, 33);
$total = count($names);
$size = 7;

for ($i = 0; $i < 500; $i++) {
  if (!isset($offset) || $offset >= $total) {
    $offset = 0;
  }

  $slice = array_slice($names, $offset, $size);
  do_whatever_you_need_with_the_slice($slice);

  $offset += $size;
}

function do_whatever_you_need_with_the_slice($slice) {
  echo implode('|', $slice) . '<br>';
}


выводит:
1|2|3|4|5|6|7
8|9|10|11|12|13|14
15|16|17|18|19|20|21
22|23|24|25|26|27|28
29|30|31|32|33
1|2|3|4|5|6|7
8|9|10|11|12|13|14
15|16|17|18|19|20|21
22|23|24|25|26|27|28
29|30|31|32|33
...
1|2|3|4|5|6|7
8|9|10|11|12|13|14
15|16|17|18|19|20|21
22|23|24|25|26|27|28
29|30|31|32|33
... и так далее
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы