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>";
};