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" в массиве?
Ответы
Ответ 1
$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
.
вот полный script: http://pastie.org/2275879
Ответ 2
В массиве ваши элементы . Вы можете пропустить их так:
foreach ($json['items'] as $address)
{
echo 'Address: '.$address;
}
Ответ 3
Кстати, я делал var_dump, print, print_r, переключал его взад и вперед от Object to Array, чтобы узнать больше о структуре массива и т.д., а также сделал кучу вариантов эхо-сигналов, а также для циклов foreach и т.д. чтобы попытаться получить то, что я хотел от массива.
Хорошо, поэтому, чтобы обобщить, ответы, похоже, указывают, что я должен:
- сначала получить весь массив, например $string (сделал это)
- затем декодирует массив в $json (сделал это)
- затем каким-то образом проанализируйте вспомогательные массивы из $json (делая что-то вроде ссылок на адреса в массиве вроде "items.address" или "[items] [address]" и т.д. (я до сих пор не уверен в ответах выше, как для этого.. они намекают на это, но не могут видеть синтаксис и т.д.?)
Я попробовал оба ответа и получил:
Используя TaylorOtwell ответ:
Я получил:
Адрес: массив
Адрес: Массив
Тейлор
Использование ответа Далена:
Я получил:
0: массив
1: Массив
Похоже, мне нужно каким-то образом перебрать массив во второй раз в течение первого foreach, чтобы получить фактические значения?
Будет ли он выглядеть примерно так?
foreach ($json['items'] as $key => $value)
{
foreach ($json['items']['address'] as $key => $value)
{
echo "$key: $value\n";
};
};
Ответ 4
Сначала создайте класс для своих элементов.
function getAddress(address)
{
this.address=address;
}
Нажимайте объекты в массив
newAddress = JSON.stringify(new
getAddress(address));
AddressArray.push(newAddress);
Преобразуйте массив в массив JSON с помощью
AllAddress=JSON.stringify(AddressArray);
Отправьте свой массив на бэкэнд/выборку элементов, например
$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), чтобы сразу получить все элементы из массива.
Ответ 5
Вы можете упростить вводную строку следующим образом
$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>";
};