web-dev-qa-db-fra.com

php json_decode comment sortir un tableau

Voici mon code php avec une chaîne au format 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";
    };

?>

Je veux apprendre à analyser/afficher json string dans quelque chose que je peux montrer en HTML ou mettre dans une base de données .. Cependant, je suis coincé sur quelque chose qui est très simple, mais j'ai passé presque toute la matinée à essayer de comprendre.

Ce que je veux comprendre, c'est pourquoi les résultats de mon code ci-dessus me donnent le résultat suivant:

"items: Array"

Et pas ce que je veux/espère obtenir:

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

Qu'est-ce que je rate? "Adresse" n'est-il pas le "niveau" suivant par rapport à "Article" dans le tableau? 

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

si vous voulez avoir items: <address>:

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

de toute façon, si vous n’êtes pas sûr de la construction d’un tableau, vous pouvez l’imprimer via:

print_r($json);

qui va imprimer:

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

            [1] => Array
                (
                    [address] => W 8th St
                )
        )
)

maintenant, vous avez découvert que $json contient uniquement un tableau (items) de deux tableaux, puis, si vous le faites en boucle, vous obtiendrez ce tableau qui est imprimé dans votre exemple . Comme expliqué ci-dessus, vous devez aller un peu plus loin en boucle les éléments de votre tableau items et affiche leur élément address.

voici le script complet: http://pastie.org/2275879

15
Dalen

BTW, j’ai fait var_dump, print, print_r, je l’a fait basculer d’objet en tableau, pour essayer d’en savoir plus sur la structure de tableau, etc., ainsi que sur un tas de variations d’écho, ainsi que pour et pour chaque boucle, etc. obtenir ce que je voulais de tableau.

Ok, donc pour résumer, les réponses semblent indiquer que je dois:

  • d'abord obtenir le tableau entier, par exemple $ string (l'a fait)
  • puis décoder le tableau en $ json (fait cela)
  • puis en quelque sorte analyser les sous-tableaux de $ json (en faisant quelque chose comme référencer les adresses dans un tableau comme "items.address" ou "[items] [address]" etc. (je ne suis toujours pas sûr des réponses ci-dessus comment faire cela .. ils y font allusion mais ne peuvent pas voir la syntaxe, etc.?)

J'ai essayé les deux réponses et obtenu: 

En utilisant TaylorOtwell, répondez:

J'ai eu: Adresse: Array Adresse: Array

Taylor 

En utilisant la réponse de Dalen:

J'ai eu: 0: tableau 1: tableau 

On dirait que j'ai besoin d'une manière ou d'une autre de parcourir un tableau une deuxième fois dans le premier formulaire pour obtenir les valeurs réelles? 

Cela ressemblerait-il à quelque chose comme ça?

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

Vos éléments sont dans un tableau. Vous pouvez les parcourir comme ceci:

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

Commencez par créer une classe pour vos éléments.

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

Poussez des objets dans votre tableau

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

Convertissez votre tableau en tableau JSON en utilisant 

AllAddress=JSON.stringify(AddressArray);

Envoyez votre tableau à backend/fetch des éléments comme

$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
}

* Utilisez implode (php) pour obtenir tous les éléments du tableau à la fois.

0
Mehul S