Цикл JSON не печатает ожидаемые результаты

#php #json

Вопрос:

У меня есть массив JSON, который я пытаюсь просмотреть и воспроизвести определенные биты.

Фрагмент полного массива можно посмотреть здесь — https://pastebin.com/eCYcZWpV

Это код, который я использую:

 $str = file_get_contents('tst.json');
$json = json_decode($str, true);

       foreach($json['results'] as $item){
           
            foreach($item['vehicle'] as $data){
         
          echo $data['ownershipCondition'];
          echo "<br>";
          echo $data['registration'];
          echo "<br>";
          echo $data['vin'];
          echo "<br>";
          echo $data['make'];
          echo "<br>";
          echo $data['model'];
          echo "<br>";
          echo "<br>";
        }
    }
 

Это ожидаемый результат:

 Used
ABC123
32847328474
Renault
Clio

Used
DEF123
48578435347589
Dacia
Sandeo
Clio
 

Это то, что я на самом деле получаю вместе с целым рядом незаконных ошибок смещения строк

 U
U
U
U
U
U

H
H
H
H
H
H

V
V
V
V
V
V

R
R
R
R
R
R

C
C
C
C
C
C
 

Ответ №1:

В соответствии с вашими образцами данных, $item['vehicle'] является объектом, а не массивом. В нем содержится только один набор данных. Поэтому вам не нужна вторая foreach . Просто получите более прямой доступ к свойствам:

 $str = file_get_contents('tst.json');
$json = json_decode($str, true);

foreach($json['results'] as $item){
       
  echo $item['vehicle']['ownershipCondition'];
  echo "<br>";
  echo $item['vehicle']['registration'];
  echo "<br>";
  echo $item['vehicle']['vin'];
  echo "<br>";
  echo $item['vehicle']['make'];
  echo "<br>";
  echo $item['vehicle']['model'];
  echo "<br>";
  echo "<br>";
}
 

P.S. На случай, если вам интересно , причина ошибок смещения строки в том, что, просматривая $item["vehicle"] , вы зацикливаете каждое свойство. Так, например, в первом цикле он найдет свойство «ownershipCondition» и введет в него его значение $data . Таким образом, первое указанное значение $data будет «Используется», и очевидно, что это строка, которая не имеет никаких свойств, таких как «ownershipCondition», «регистрация» и т.д.