Получить доступ к одному значению массива объектов php

Я вызываю API, и я получаю ответ

Array (
    [meta] => Array ( 
        [code] => 200 
        [type] => Success 
        [message] => Success 
    ) 
    [data] => Array (
        [items] => Array (
            [0] => Array ( 
                [id] => b4a235596fd9550dfb69f181f4db007f 
                [tracking_number] => 2649884668232181 
                [carrier_code] => hermes 
                [order_create_time] => 
                [destination_code] => 
                [status] => delivered 
                [track_update] => 
                [original_country] => 
                [itemTimeLength] => 7 
                [stayTimeLength] => 74 
                [service_code] => 
                [packageStatus] => 
                [substatus] => 
                [last_mile_tracking_supported] => 
                [origin_info] => Array ( 
                    [ItemReceived] => 2019-04-09 09:29 
                    [ItemDispatched] => 
                    [DepartfromAirport] => 
                    [ArrivalfromAbroad] => 
                    [CustomsClearance] => 
                    [DestinationArrived] => 
                    [weblink] => https://www.hermesworld.com/en/ 
                    [phone] => 
                    [carrier_code] => hermes 
                    [trackinfo] => Array ( 
                        [0] => Array ( 
                                [Date] => 2019-04-15 11:51 
                                [StatusDescription] => Posted through letterbox 
                                [Details] => 
                                [checkpoint_status] => delivered 
                            ) 
                            [1] => Array (
                                [Date] => 2019-04-15 09:45 
                                [StatusDescription] => Delivery will be attempted between 10:00 and 14:00 today 
                                [Details] => 
                                [checkpoint_status] => transit 
                            ) 
                            [2] => Array ( 
                                [Date] => 2019-04-15 06:39 
                                [StatusDescription] => On its way to the courier 
                                [Details] => 
                                [checkpoint_status] => transit 
                            ) 
                            [3] => Array ( 
                                [Date] => 2019-04-14 22:33 
                                [StatusDescription] => At the customers local depot 
                                [Details] => 
                                [checkpoint_status] => transit 
                            )
                            .....
                    ) 
                ) 
                [destination_info] => 
                [lastEvent] => Posted through letterbox,2019-04-15 11:51 
                [lastUpdateTime] => 2019-04-15 11:51 
            )
        ) 
    ) 
) 1 

Я хотел бы получить доступ к значению checkpoint_status, но я не могу получить его следующими способами:

response in variable 
$track = print_r($track);

1. $track['checkpoint_status']
2. $track[0] // just to see if it returns anything, but no result
3. $track[1] // just to see if it returns anything, but no result
4. array_column($track, 'checkpoint_status'); // returns nothing

хочешь каждый checkpoint_status? тогда вы можете зациклить

Anant Kumar Singh 28.06.2019 12:53

правильно.. но я не получаю значение статуса контрольной точки

sid 28.06.2019 12:55
Стоит ли изучать 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
2
59
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно зациклиться, чтобы получить все checkpoint_status

foreach($array['data']['items'] as $item){
   foreach($item['origin_info']['trackinfo'] as $trackinfo){
     echo $trackinfo['checkpoint_status'].PHP_EOL;
   }
}

Пример вывода: -https://3v4l.org/IM7I1

если я могу спросить .. где вы отформатировали массив? увидев отформатированный массив, казалось легко получить значения

sid 28.06.2019 13:34

@sid я сделал это в своем конце через блокнот ++. Кстати рад помочь вам :):)

Anant Kumar Singh 28.06.2019 13:47

Вы можете использовать array_walk_recursive

 $r = [];
 array_walk_recursive($a, function($v, $k) use(&$r){
  ($k == 'checkpoint_status') ? ($r[]=$v) : '';
 });

https://3v4l.org/rCVEB

    $response = [
    'meta' => [
        'code' => 200,
        'type' => 'Success',
        'message' => 'Success',
    ],
    'data' =>  [
        'items' =>  [
            '0' =>  [ 
                'id' => 'b4a235596fd9550dfb69f181f4db007f', 
                'tracking_number' => '2649884668232181', 
                'carrier_code' => 'hermes', 
                'order_create_time' => null, 
                'destination_code' => null, 
                'status' => 'delivered', 
                'track_update' => null, 
                'original_country' => null, 
                'itemTimeLength' => 7, 
                'stayTimeLength' => 74, 
                'service_code' => null, 
                'packageStatus' => null, 
                'substatus' => null, 
                'last_mile_tracking_supported' => null,
                'origin_info' =>  [ 
                    'ItemReceived' => '2019-04-09 09:29',
                    'ItemDispatched' =>  null,
                    'DepartfromAirport' =>  null,
                    'ArrivalfromAbroad' =>  null,
                    'CustomsClearance' =>  null,
                    'DestinationArrived' =>  null,
                    'weblink' => 'https://www.hermesworld.com/en/',
                    'phone' => null,
                    'carrier_code' => 'hermes',
                    'trackinfo' =>  [ 
                        '0' =>  [ 
                                'Date' => '2019-04-15 11:51', 
                                'StatusDescription' => 'Posted through letterbox', 
                                'Details' =>null, 
                                'checkpoint_status' => 'delivered', 
                        ],
                        '1' =>  [
                            'Date' => '2019-04-15 09:45',
                            'StatusDescription' => 'Delivery will be attempted between 10:00 and 14:00 today',
                            'Details' => null,
                            'checkpoint_status' => 'transit',
                        ], 
                        '2' =>  [ 
                            'Date' => '2019-04-15 06:39',
                            'StatusDescription' => 'On its way to the courier',
                            'Details' =>null, 
                            'checkpoint_status' => 'transit',
                        ], 
                        '3' =>  [ 
                            'Date' => '2019-04-14 22:33',
                            'StatusDescription' => 'At the customers local depot',
                            'Details' => null,
                            'checkpoint_status' => 'transit',
                        ],
                    ]
                ],
                'destination_info' => null,
                'lastEvent' => 'Posted through letterbox,2019-04-15 11:51',
                'lastUpdateTime' => '2019-04-15 11:51',
            ]
        ]
    ]
];

Если вы работаете в режиме разработки, вы можете включить отображение ошибок на php и получить такой результат:

echo $response['checkpoint_status']; // won't work as response array has no checkpoint_status keyed array
echo $response[0]; // won't work as response array has no 0 keyed array
echo $response[1]; // won't work as response array has no 1 keyed array
print_r(array_column($response, 'checkpoint_status')); // won't work as response array has no column checkpoint_status

Есть много способов получить результат, один из которых приведен ниже:

$trackinfo = $response['data']['items'][0]['origin_info']['trackinfo'];
$checkpoint_status = array_column($trackinfo, 'checkpoint_status');
print_r($checkpoint_status);

Результат:

Array ( 
    [0] => delivered 
    [1] => transit 
    [2] => transit 
    [3] => transit
)

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