Получение вложенного массива из JSON

Этот - мой 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;
        }
    }
}

Но ничего не возвращает. Скажите, пожалуйста, если я ошибаюсь. Спасибо.

Вы расшифровали ответ JSON в своем массиве $ OnceBooking? Если нет, используйте $onceBooking = json_decode($onceBooking, true);, а затем проверьте петлю.

Kishen Nagaraju 14.06.2018 20:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

$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.

Mike Jouwstra 14.06.2018 21:02

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

Asif Sharif Shahid 14.06.2018 21:05

если в бронировании нет слотов, добавьте total_days как 0, иначе получите слоты и подсчитайте их уникальные дни.

Asif Sharif Shahid 14.06.2018 21:06

Добавлено изменение для возврата бронирований, которые вы можете рассчитать в вызывающем методе.

Mike Jouwstra 14.06.2018 21:14

спасибо, но я хочу считать уникальные booking_slots как total_days, если бронирование не равно нулю

Asif Sharif Shahid 14.06.2018 21:21
Ответ принят как подходящий

Вам нужно немного изменить код, потому что вы возвращаете слот бронирования первого элемента.

$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;

Надеюсь это поможет.

ОК. Рад, что смог помочь.

Kishen Nagaraju 14.06.2018 20:59

это потому, что ключевое слово true используется в функции json_decode для преобразования ответа в ассоциативные массивы. Как и в вашем коде, вы получаете доступ к объектам, которые создаются, если true не используется. Если используется значение true, вам придется обращаться к ним в формате массива.

Kishen Nagaraju 14.06.2018 21:10

Конечно. Нет проблем. Рад, что смог помочь.

Kishen Nagaraju 14.06.2018 21:14

Другие вопросы по теме