PHP - Le déplacement de l'objet échoue si la valeur de l'élément n'est pas de type chaîne
P粉769045426
P粉769045426 2023-07-30 18:07:04
0
1
532
<p>J'ai une question simple, mais quoi qu'il en soit, je n'arrive pas à comprendre ce qui se passe. J'ai une chaîne JSON qui ressemble à ceci : </p> <pre class="brush:php;toolbar:false;">{ "network_title": "Réseau", "class_title": "Classe", "notes": [{ "number": "Pré-K", "label": "Pré-maternelle", "commande": 1, "identifiant": "34567" }, { "numéro": "TK", "label": "Maternelle de transition", "commande": 2, "identifiant": "23456" }, { "numéro": "K", "label": "Maternelle", "commande": 3, "identifiant": "12345" }] }</pré> <p>Il est converti en un tableau comme celui-ci (pour une raison spécifique) : </p> <pre class="brush:php;toolbar:false;">array:3 [ "titre_réseau" => "Réseau" "class_title" => "grades" => tableau:3 [ 0 => tableau:4 [ "numéro" => "Pré-K" "étiquette" => "Pré-maternelle" "commande" => "gid" => "aa71da69-93ab-11e9-bda9-06f442b19d06" ] 1 => tableau :4 [ "numéro" => "TK" "label" => "Maternelle de transition" "commande" => "gid" => "d3c6754a-6298-48d0-9afa-6a19bafb8464" ] 2 => tableau:4 [ "numéro" => "K" "étiquette" => "Maternelle" "commande" => "gid" => "a815a771-9aff-4020-b7d2-0c95a05da21e" ] ] ]≪/pré> <p>Ensuite, j'essaie de parcourir le tableau, et lorsqu'il trouve un élément dont le type n'est pas une chaîne (comme l'élément order), il obtient un argument non valide fourni pour l'erreur foreach(). Le message d'erreur indique que la ligne foreach() pose problème. Voici un exemple de code : </p> <pre class="brush:php;toolbar:false;">foreach ($arrTree as $k => $v) { si (is_string($v)) { //Fais quelque chose ici } }</pré> <p>Je suis sûr qu'il me manque quelque chose de basique ici, mais j'en ai marre de chercher des problèmes. Merci. </p>
P粉769045426
P粉769045426

répondre à tous(1)
P粉615886660

Le problème est que $arrTree est un tableau multidimensionnel.

La boucle foreach dans votre code ne traverse que le premier niveau du tableau, pas les tableaux imbriqués (tels que les "grades"). Lorsqu'il rencontre des "grades", la valeur de $v n'est pas une chaîne mais un tableau, c'est pourquoi la vérification is_string($v) échoue.

Vous devez ajouter une boucle foreach imbriquée pour gérer cette structure.

Voici un exemple montrant comment y parvenir :

foreach ($arrTree as $k => $v)
{ 
    if (is_string($v)) 
    {
        //Do something here
    }
    else if (is_array($v))
    {
        foreach($v as $key => $value)
        {
            if(is_string($value))
            {
                //Do something here
            }
            else if(is_array($value))
            {
                foreach($value as $innerKey => $innerValue)
                {
                    if(is_string($innerValue))
                    {
                        //Do something here
                    }
                }
            }
        }
    }
} 
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal