recherche

Maison  >  Questions et réponses  >  le corps du texte

Boucler des objets PHP à l'aide de clés dynamiques : un guide étape par étape

J'essaie d'analyser un fichier JSON en utilisant PHP. Mais maintenant je suis coincé.

Voici le contenu de mon fichier JSON :

{
    "John": {
        "status":"Wait"
    },
    "Jennifer": {
        "status":"Active"
    },
    "James": {
        "status":"Active",
        "age":56,
        "count":10,
        "progress":0.0029857,
        "bad":0
    }
}

Voici ce que j'ai essayé jusqu'à présent :

<?php

$string = file_get_contents("/home/michael/test.json");
$json_a = json_decode($string, true);

echo $json_a['John'][status];
echo $json_a['Jennifer'][status];

Mais comme je ne connais pas le nom (par exemple 'John''Jennifer')以及所有可用的键和值(例如 'age''count') à l'avance, je pense que je dois créer des boucles foreach.

J'aurais aimé qu'il y ait un exemple.

P粉312195700P粉312195700431 Il y a quelques jours647

répondre à tous(2)je répondrai

  • P粉920199761

    P粉9201997612023-10-11 07:17:05

    Je ne peux pas croire qu'autant de personnes publient des réponses sans lire correctement le JSON.

    Si vous itérez séparément $json_a,你就会得到一个对象的对象。即使您传入 true comme deuxième paramètre, vous disposez également d'un tableau 2D. Si vous effectuez une boucle sur la première dimension, vous ne pouvez pas faire écho à la deuxième dimension comme ceci. Donc c'est faux :

    foreach ($json_a as $k => $v) {
       echo $k, ' : ', $v;
    }

    Pour faire écho au statut de chacun, essayez ceci :

     $person_a) {
        echo $person_a['status'];
    }
    
    ?>

    répondre
    0
  • P粉668019339

    P粉6680193392023-10-11 07:17:05

    Pour parcourir un tableau multidimensionnel, vous pouvez utiliser RecursiveArrayIterator< /p>

    $jsonIterator = new RecursiveIteratorIterator(
        new RecursiveArrayIterator(json_decode($json, TRUE)),
        RecursiveIteratorIterator::SELF_FIRST);
    
    foreach ($jsonIterator as $key => $val) {
        if(is_array($val)) {
            echo "$key:\n";
        } else {
            echo "$key => $val\n";
        }
    }

    Sortie :

    John:
    status => Wait
    Jennifer:
    status => Active
    James:
    status => Active
    age => 56
    count => 10
    progress => 0.0029857
    bad => 0

    Exécuter sur le clavier

    répondre
    0
  • Annulerrépondre