Этот - мой JSON.
Хранится в переменной с именем $onceBooking.
Я хочу получить booking_slots от каждого booking.
Это мой код:
for ($i = 0; $i < count($onceBooking); $i++) {
if (count($onceBooking[$i]->bookings) == 0) {
$onceBooking[$i]->total_days = 0;
} else {
$onceBooking[$i]->total_days = count($onceBooking[$i]->bookings);
$bookings = $onceBooking[$i]->bookings;
for ($j = 0; $j < count($bookings); $j++) {
return $bookings[$j]->booking_slots;
}
}
}
Но ничего не возвращает. Скажите, пожалуйста, если я ошибаюсь. Спасибо.






$data = json_decode($onceBooking);
Затем вы можете просмотреть данные, чтобы получить объекты бронирования.
$result = ["total_days" => 0];
foreach($data as $instance) {
$result["total_days"] += count($instance->bookings);
$bookings = $instance->bookings;
for($i = 0; $i < count($bookings); $i++) {
return $bookings->booking_slots;
}
}
- Обновлено: для возврата общего количества дней и бронирований.
$result = ["total_days" => 0, "bookings" => []];
foreach($data as $instance) {
$result["total_days"] += count($instance->bookings);
array_push($result["bookings"], $instance->$bookings);
}
return $result;
оператор return кажется странным, кажется, что вы даже не используете переменную total_days.
На самом деле, я хочу подсчитать общее количество дней бронирования, поэтому я использую общее количество дней.
если в бронировании нет слотов, добавьте total_days как 0, иначе получите слоты и подсчитайте их уникальные дни.
Добавлено изменение для возврата бронирований, которые вы можете рассчитать в вызывающем методе.
спасибо, но я хочу считать уникальные booking_slots как total_days, если бронирование не равно нулю
Вам нужно немного изменить код, потому что вы возвращаете слот бронирования первого элемента.
$data = json_decode($onceBooking);
$bookingSlots = array();
for ($i = 0; $i < count($onceBooking); $i++) {
if (count($onceBooking[$i]->bookings) == 0) {
$onceBooking[$i]->total_days = 0;
} else {
$onceBooking[$i]->total_days = count($onceBooking[$i]->bookings);
$bookings = $onceBooking[$i]->bookings;
for ($j = 0; $j < count($bookings); $j++) {
if (!empty($bookings[$j])) {
$bookingSlots[$bookings[$j]->id] = $bookings[$j]->booking_slots;
}
}
}
}
return $bookingSlots;
Надеюсь это поможет.
ОК. Рад, что смог помочь.
это потому, что ключевое слово true используется в функции json_decode для преобразования ответа в ассоциативные массивы. Как и в вашем коде, вы получаете доступ к объектам, которые создаются, если true не используется. Если используется значение true, вам придется обращаться к ним в формате массива.
Конечно. Нет проблем. Рад, что смог помочь.
Вы расшифровали ответ JSON в своем массиве $ OnceBooking? Если нет, используйте
$onceBooking = json_decode($onceBooking, true);, а затем проверьте петлю.