powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - можно ли определить, что идет последняя итерация цикла?
4 сообщений из 4, страница 1 из 1
PHP - можно ли определить, что идет последняя итерация цикла?
    #40004434
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть массив исходных данных $queue, который нужно обработать внешним сервисом.
Примерно так:
Код: php
1.
2.
3.
foreach ($queue as $row) {
  $res = restservice->query($row['id']);
}



Для оптимизации на сервис можно отправлять пачку запросов:
Код: php
1.
$res = restservice->batch($queue);



Но размер пачки ограничен 50, поэтому исходный массив нужно разбивать на порции не более 50 элементов каждый.

Можно вначале "нарезать" $queue на массив массивов.
Но я хочу обойтись одним циклом:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$batch = [];
foreach ($queue as $row) {
  $batch[] = $row;
  if ((count($batch) == 50) || (is_last_iteration($queue))) {
    $res = restservice->batch($batch);
    $batch = [];
  }
}


Что должно быть на месте is_last_iteration ?
...
Рейтинг: 0 / 0
PHP - можно ли определить, что идет последняя итерация цикла?
    #40004448
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$batch = [];
$n = count($queue);
$i = 0;
foreach ($queue as $row) {
  $i++;
  $batch[] = $row;
  if (0 == ($i % 50) || ($i==$n)) {
    restservice->batch($batch);
    $batch = [];
  }
}


Но хотелось бы обойтись без вспомогательных переменных.
По идее у итератора для foreach должны быть какие-то внутренние указатели или флаги.
...
Рейтинг: 0 / 0
PHP - можно ли определить, что идет последняя итерация цикла?
    #40004502
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо размер пачки ограничен 50, поэтому исходный массив нужно разбивать на порции не более 50 элементов каждый.

https://www.php.net/manual/en/function.array-chunk.php
...
Рейтинг: 0 / 0
PHP - можно ли определить, что идет последняя итерация цикла?
    #40004535
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
array_chunk не подходит, фактический код у меня сложнее.
Во-первых мне нужна ссылка на запись (то есть в цикле я использую &$row), в которой по итогам выполнения запроса я меняю некоторые данные.
Во-вторых, в batch мне нужно передавать более сложную структуру, то есть мне нужно выполнять не $batch[] = $row, а $batch[...] = ['method'=>'...', 'params'=>['...'=>$row['...'], ...]].
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - можно ли определить, что идет последняя итерация цикла?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]