php json_decode как выводить массив

Вот мой php-код с форматированной json-строкой:

<?php $string='{"items": [ { "address":"W 7th Ave" }, { "address":"W 8th St" } ]}'; $json = json_decode($string, true); foreach ($json as $key => $value){ echo "$key: $value\n"; }; ?> 

Я хочу узнать, как разбирать / выводить строку json во что-то, что я могу показать в html или помещать в базу данных. Однако я застрял на чем-то, что очень просто, но я потратил большую часть утра, пытаясь понять.

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

"items: Array"

И не то, что я хочу / ожидаю получить:

 "items: W 7th Ave" "items: W 8th St" 

Что мне не хватает? Разве это не «Адрес» следующего «уровня» вниз от «Item» в массиве?

 $string = file_get_contents('./string.json'); $json = json_decode($string); 

если вы хотите иметь items: <address> :

 foreach ($json['items'] as $address) { echo "items:". $address['address'] ."\n"; }; 

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

 print_r($json); 

который будет печатать:

 Array ( [items] => Array ( [0] => Array ( [address] => W 7th Ave ) [1] => Array ( [address] => W 8th St ) ) ) 

теперь вы узнали, что $json содержит только массив ( items ) из двух массивов, а затем, если вы его зацикливаете, вы получите тот массив, который напечатан в вашем примере. Как объяснялось выше, вам нужно сделать один шаг глубже, зациклив элементы в массиве items и напечатать их элемент address .

вот полный сценарий: http://pastie.org/2275879

Ваши объекты находятся в массиве. Вы можете пропустить их так:

 foreach ($json['items'] as $address) { echo 'Address: '.$address; } 

BTW, я делал var_dump, print, print_r, переключал его назад и вперед из Object to Array, чтобы узнать больше о структуре массива и т. Д., А также сделал кучу вариантов эха, а также для циклов foreach и т. Д., Чтобы попытаться получить то, что я хотел от массива.

Хорошо, поэтому, чтобы обобщить, ответы, похоже, указывают, что я должен:

  • сначала получите весь массив, например $ string (сделал это)
  • затем декодирует массив в $ json (сделал это)
  • затем каким-то образом проанализируйте вспомогательные массивы из $ json (делая что-то вроде ссылок на адреса в массиве вроде «items.address» или «[items] [address]» и т. д. (я до сих пор не уверен в ответах выше, как это сделать .. они намекают на это, но не могут видеть синтаксис и т. д.?)

Я попробовал оба ответа и получил:

Используя ответ TaylorOtwell:

Я получил: Адрес: Array Адрес: Array

Тейлор

Используя ответ Далена:

Я получил: 0: Массив 1: Массив

Похоже, мне нужно каким-то образом пройти через массив во второй раз в течение первого foreach, чтобы получить фактические значения?

Будет ли это выглядеть примерно так?

 foreach ($json['items'] as $key => $value) { foreach ($json['items']['address'] as $key => $value) { echo "$key: $value\n"; }; }; 

Сначала создайте класс для своих элементов.

 function getAddress(address) { this.address=address; } 

Нажимайте объекты в массив

 newAddress = JSON.stringify(new getAddress(address)); AddressArray.push(newAddress); 

Преобразуйте массив в массив JSON, используя

 AllAddress=JSON.stringify(AddressArray); 

Отправьте свой массив на элементы backend / fetch, например

 $json_array = json_decode($AllAddress, true); for($i=0;$i<count($json_array);$i++) { $eachAddress = json_decode($json_array[$i],true); $address= $eachAddress["address"];//fetch particular element from your JSON Object } 

* Используйте implode (php), чтобы сразу получить все элементы из массива.

Вы можете упростить вводную строку следующим образом

$string='{"address":["W 7th Ave","W 8th St"]}';

$json = json_decode($string, true);
echo'<pre>';
print_r($json);
echo'</pre>';
foreach ($json['address'] as $key=>$value){
echo "Address $key:". $value ."<br>";
};