Как разделить массив данных, возвращаемых из строки json в php

#php #arrays #json

#php #массивы #json

Вопрос:

У меня есть возвращаемая строка json, подобная приведенной ниже. Я хочу извлечь список объектов политики отмены, таких как время отключения и возврат в процентах. Я пытался использовать for-loop, но это мне не помогло. Не могли бы вы, пожалуйста, помочь мне извлечь это.

 Array ( 
[apiStatus] => Array ( [success] => 1 [message] => SUCCESS ) <br>
[apiAvailableBuses] => Array ( <br>
 [0] => Array ( [droppingPoints] => [availableSeats] => 41 <br>[partialCancellationAllowed] => [arrivalTime] => 08:00 AM <br>
  [cancellationPolicy] => [<br>
   {"cutoffTime":"1","refundInPercentage":"10"},<br>
   {"cutoffTime":"2","refundInPercentage":"50"},<br>
   {"cutoffTime":"4","refundInPercentage":"90"}<br>
   ] <br>
   [boardingPoints] => Array ( [0] => Array ( [time] => 09:00PM [location] => Ameerpet,|Jeans Corner 9687452130 [id] => 6 ) [1] => Array ( [time] => 09:15PM [location] => S.R Nagar,S.R Nagar [id] => 2224 ) [2] => Array ( [time] => 09:10PM [location] => Kondapur,Toyota Show room [id] => 2244 ) ) [operatorName] => Deepak Travels [departureTime] => 9:00 PM [mTicketAllowed] => [idProofRequired] => [serviceId] => 6622 [fare] => 800 [busType] => 2 1 Hi-Tech Non A/c [routeScheduleId] => 6622 [commPCT] => 0 [operatorId] => 213 [inventoryType] => 0 ) <br>
 [1] => Array ( [droppingPoints] => [availableSeats] => 41 [partialCancellationAllowed] => [arrivalTime] => 07:00 AM <br>
 [cancellationPolicy] => [<br>
 {"cutoffTime":"1","refundInPercentage":"10"},<br>
 {"cutoffTime":"2","refundInPercentage":"50"},<br>
 {"cutoffTime":"4","refundInPercentage":"90"}<br>
 ] <br>
 [boardingPoints] => Array ( [0] => Array ( [time] => 09:10PM [location] => Ameerpet,|Jeans Corner [id] => 6 ) [1] => Array ( [time] => 09:00PM [location] => S.R Nagar,S.R Nagar [id] => 2224 ) [2] => Array ( [time] => 08:30PM [location] => KUKATPALLY,JNTU [id] => 2230 ) ) [operatorName] => Dhanunjayabus [departureTime] => 9:00 PM [mTicketAllowed] => [idProofRequired] => [serviceId] => 6743 [fare] => 900 [busType] => VOLVO [routeScheduleId] => 6743 [commPCT] => 0 [operatorId] => 233 [inventoryType] => 0 )
 )

)
  

Ответ №1:

Используйте foreach() для этого вот так:

 foreach ($your_response['apiAvailableBuses'] as $el) {
    $cancellationPolicy[] = $el['cancellationPolicy'];
}
  

Комментарии:

1. Привет Rax — он выдает массив cancellationPolicy, можем ли мы также извлечь данные для времени отключения? поскольку я пытался, но получал ошибку

2. Да, вы можете. Вы можете сделать это следующим образом в качестве примера: $cancellationPolicy[0]->cutoffTime .

3. Привет, Rax — я попробовал то же, что и вы, и он выдает ошибку типа «получить свойство не-объекта». я что-то упускаю?

4. foreach($someArray2[‘apiAvailableBuses’] как $s2) { $cancellationPolicy[] = $s2[‘cancellationPolicy’]; echo $cancellationPolicy[0]-> Время отключения.'<br>’; }

5. Привет, Ракс, можешь ли ты, пожалуйста, помочь мне в этом.

Ответ №2:

Попробуйте это:

 foreach($data['apiStatus']['apiAvailableBuses'] as $item) {
    foreach($item['cancellationPolicy'] as $key => $json) {
        $jsonDecoded = json_decode($json, true);
        // And you will have access to the data like this
        // $jsonDecoded['cutoffTime'];
        // $jsonDecoded['refundInPercentage'];
    }
}
  

Ответ №3:

 $response = json_decode($apiResponse);
$cancellationPolicies = [];

foreach ($response->apiAvailableBuses as $availableBus) {

    $cancellationPolicies[] = $availableBus['cancellationPolicy'];

    // if you want to display something you can simply do it like this;

    echo $availableBus['cancellationPolicy']->cutoffTime;
}
  

Комментарии:

1. следовал тому же подходу, но получал ошибку ‘Fatal error: не удается использовать объект типа stdClass в качестве массива’ в строке (foreach ($someArray2[‘apiAvailableBuses’] как $availableBus) {)