Какой цикл использовать, чтобы последовательно выдавались значения?
Допустим в 16:30 запускаю функцию в цикле от 0 до 1440 минут с шагом 60 и формирую массив количества сообщений и массив соответствующих временных отчетов, чтобы понять сколько было событий в каждый час за прошедшие сутки.
for (let i = 0; i < 1440; i+=60) { funcGetMessageToday(-i); // делает запрос на сервер } |
for (let i = 0; i < 1440; i+=60) { funcGetMessageToday(-i); // делает запрос на сервер }
Приходит такой JSON:
['18:30', '19:30', '20:30', '21:30', '22:30', '23:30', '00:30', '01:30', '02:30', '03:30', '06:30', '04:30', '09:30', '07:30', '11:30', '05:30', '12:30', '13:30', '08:30', '10:30', '15:30', '14:30', '16:30'] |
['18:30', '19:30', '20:30', '21:30', '22:30', '23:30', '00:30', '01:30', '02:30', '03:30', '06:30', '04:30', '09:30', '07:30', '11:30', '05:30', '12:30', '13:30', '08:30', '10:30', '15:30', '14:30', '16:30']
Местам время перепутано. Нужно чтобы возвращался корректный массив.
['18:30', '19:30', '20:30', '21:30', '22:30', '23:30', '00:30', '01:30', '02:30', '03:30', '04:30', '05:30', '06:30', '07:30', '08:30', '09:30', '10:30', '11:30', '12:30', '13:30', '14:30', '15:30', '16:30'] |
['18:30', '19:30', '20:30', '21:30', '22:30', '23:30', '00:30', '01:30', '02:30', '03:30', '04:30', '05:30', '06:30', '07:30', '08:30', '09:30', '10:30', '11:30', '12:30', '13:30', '14:30', '15:30', '16:30']
Может мне какой-то другой цикл или вообще способ выбрать, чтобы была последовательная работа функции? Вроде сам for последовательный, но приходят значения не всегда корректно.
Дополнительно:
Приходит такой JSON:
Откуда приходит? С бека? Тогда ты ничего не сделаешь.
Покажи весь актуальный код, потому что то, что ты пишешь, почти гарантированно слабо связано с реальностью.
for (let i = 0; i < 1440; i+=60) {
funcGetMessageToday(-i); // делает запрос на сервер
}
а в какую переменную результат складывается? что в ней, тот самый json или одно его значение?
Вангую - функция у вас асинхронная и порядок занесения данных в массив соответствует не порядку запросов, а порядку прихода ответов.
Лучший вариант - менять API, чтобы сервер возвращал нужные данные за один запрос, например, с передачей ему начала и конца интервала и шага по времени.
Ещй вариант - сохранять данные в объект или Map, где ключом является время. При необходимости потом преобразовывать в массив по сортированным ключам.
- Точно ассинхронная) можно for await
- Приветствую. Сделал в итоге по второму варианту - сохранял данные в объект и сортировал. Но сам понимаю, что проще API поменять, на этом и буду настаивать. Большое спасибо)
Ответы:
Сортировать после получения данных. Либо поочерёдно пробовать доставать данные
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для последовательного вывода значений в PHP можно использовать различные циклы, такие как цикл for, цикл while или цикл foreach, в зависимости от конкретной задачи.
1. Цикл for:
Цикл for подходит для случаев, когда известно количество итераций. Например, если нужно вывести значения от 1 до 10, можно использовать следующий код:
for ($i = 1; $i <= 10; $i++) { echo $i . "<br>"; }
2. Цикл while:
Цикл while подходит для случаев, когда количество итераций заранее неизвестно. Например, если нужно вывести значения от 1 до 10, можно использовать следующий код:
$i = 1; while ($i <= 10) { echo $i . "<br>"; $i++; }
3. Цикл foreach:
Цикл foreach используется для перебора элементов массива. Если у вас есть массив значений, и вы хотите вывести их последовательно, то можно воспользоваться циклом foreach:
$values = [1, 2, 3, 4, 5]; foreach ($values as $value) { echo $value . "<br>"; }
Выбор конкретного цикла зависит от конкретной задачи и структуры данных. Надеюсь, это поможет вам выбрать подходящий цикл для вашей задачи.