IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Accéder aux valeurs de variables qui se trouvent dans un tableau (array)


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut Accéder aux valeurs de variables qui se trouvent dans un tableau (array)
    Bonjour,

    Comment je peux trouver les valeurs qui se trouvent dans un tableau qui se trouve dans un autre tableau ?
    En fait, je vais assigner mes variables avec les valeurs.....

    Voici mon fichier json
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    {"info_tax": [
          {
             "prix_horstaxe": "5.00",
             "taxs": [
                {
                   "nom": "tax1",
                   "pri1": 0.05,
                   "prix2": "1.05"
                },
                {
                   "nom": "tax251",
                   "prix1": 1.05,
                   "prix2": "5.01"
                }
             ]
          }
       ]
       }
    voici mes variables avec les valeurs que je veux obtenir :

    $nom_a = 'tax1';
    $nom_b = 'tax1';

    $prix1_a = '0.05';
    $prix1_b = '1.05';

    $prix2_a = '1.05';
    $prix2_a = '5.01';

    voici ma
    1re tentative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    ini_set('display_errors', 1);
     
    ini_set('log_errors', 1);
     
    $donee_json = "array.json";
     
    $donee_json = file_get_contents($donee_json);
     
     
     
     
    //											var_dump(json_decode($donee_json));
    //											echo '<BR>';
    //											var_dump(json_decode($donee_json, true));
    //											exit();
     
     
     
    $donnee_decode_json = json_decode($donee_json);
     
    foreach ($donnee_decode_json->info_tax->taxs as $obj) //line 23 line 23 line 23 line 23 
    	{
     
    		echo $nom = $obj->nom . '< br>' . $prix1 = $obj->prix1 . '< br>' . $prix2 = $obj->prix2;
    	}
    Et voici message d'erreur :
    Notice: Trying to get property of non-object in F:\127.0.0.3\array.php on line 23

    Warning: Invalid argument supplied for foreach() in F:\127.0.0.3\array.php on line 23
    pourquoi je n'arrive pas afficher mon "echo" ?
    Comment je peux assigner les bonnes valeurs à mes variables ?

    Merci et bonne soirée

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utiliser des variables numérotées est une horreur.
    Actuellement tu as une structure en tableau, c'est la bonne facon de stocker des données organisées.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Alors comment je peux traiter ces données organisées ?

    En fait, j'ai besoin de ces valeurs séparément (dans des variables) pour les utiliser dans différents traitements...


    Merci

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Vu la structure que tu cites, je dirais que $donnee_decode_json->info_tax est un tableau qui contient un seul élément qui est un objet. Cet objet a une propriété "taxs" qui est un tableau d'objet. Donc pour accéder aux éléments du sous tableau taxs, il faut quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ($donnee_decode_json->info_tax[0]->taxs as $obj) //line 23 line 23 line 23 line 23 
    {
    	echo $nom = $obj->nom . '< br>' . $obj->prix1 . '< br>' . $obj->prix2;
    }
    ça te faciliterait la vie d'afficher $donnee_decode_json via un var_dump, histoire de bien faire la différence entre les objets et les tableaux
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Super Merci Celira, pour cette idée, ça marche : info_tax[0]
    Citation Envoyé par Celira Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($donnee_decode_json->info_tax[0]->taxs as $obj)
    Pour récupérer les valeurs, j'ai changé un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $nouveauArray = array();
    foreach ($donnee_decode_json->info_tax[0]->taxs as $obj){
    	array_push($nouveauArray , $obj);
    }
    $premieresValeurs = array_shift($nouveauArray);
    $derniereValeurs = array_pop($nouveauArray);
     
    $nom_a = $premieresValeurs->nom;
    $nom_b = $derniereValeurs->nom;
    Est ce que c'est un bon solution ou bien je pourrais faire l'autrement ?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je suis pas fan des fonctions shift et pop, dans la mesure où elles modifient le tableau d'origine et donc qu'il faut travailler avec une copie du tableau (sauf évidement dans le cas où on veut modifier le tableau, mais ça c'est autre histoire).

    Ton objectif c'est de récupérer les informations du 1er et dernier élément de ton tableau ? Il se passe quoi si il y a 3 valeurs ?

    Sinon, ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $nouveauArray = array();
    foreach ($donnee_decode_json->info_tax[0]->taxs as $obj){
    	array_push($nouveauArray , $obj);
    }
    peut être écrit plus simplement par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nouveauArray = array_values($donnee_decode_json->info_tax[0]->taxs);
    .
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Citation Envoyé par Celira Voir le message
    Ton objectif c'est de récupérer les informations du 1er et dernier élément de ton tableau ? Il se passe quoi si il y a 3 valeurs ?
    Comme tu dis, s'il y a plus que 2 valeurs, je suis complètement perdu....
    En fait, mon but c'est de récupérer toutes les informations...
    Donc les fonctions shift et pop ne marchent pas pour moi...

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Qu'est-ce que tu fais ensuite avec ces valeurs ? (pasque je suppose que tu n'es pas en train de les récupérer pour la gloire )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Attrapez les tous ! PokeJson !
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Citation Envoyé par Celira Voir le message
    Qu'est-ce que tu fais ensuite avec ces valeurs ? (pasque je suppose que tu n'es pas en train de les récupérer pour la gloire )
    Je le récupère...
    Ensuite je vais mettre dans un switch pour différencier et
    selon la case, je vais traiter, par exemple
    si case "tax1" : je vais les insérer dans MySql
    case "tax251" je vais les mettre dans un fichier XML, etc..

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Attrapez les tous ! PokeJson !
    Comment ? pas compris, "PokeJson" ?

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je pense qu'il faut que tu fasse ton traitement à l'intérieur de la boucle qui parcourt les données. Quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach ($donnee_decode_json->info_tax[0]->taxs as $obj){
    	$nom = $obj->nom;
    	$prix1 = $obj->prix1;
    	$prix2 = $obj->prix2;
     
    	switch ($nom) {
    		case 'tax1' : // en base
    			break;
    		case 'tax1' : // en XML
    			break;
    	}
    }

    Citation Envoyé par aspkiddy Voir le message
    Comment ? pas compris, "PokeJson" ?
    Non, c'est rien, juste Sabotage qui craque. On est que mardi Sab', courage !
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Merci Celira,

    Super cool

    Un grand merci...

    Je vais mettre un autre [foreach] dans un switch (par exemple, ) pour trouver d'autre valeur à insérer dans MySql.

    Je ne sais pas si j'aurais d'autres questions pour ce poste. Si j'ai bien compris, je ferme ce post et si j'en ai d'autre je vais ouvrir un autre...

    Merci encore et bonne journée

    Merci aussi pour Sabotage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/10/2010, 11h15
  2. Réponses: 1
    Dernier message: 01/05/2007, 14h59
  3. accéder aux valeurs énoncées dans type enum ?
    Par ludophil dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/10/2006, 12h57
  4. Réponses: 7
    Dernier message: 16/06/2006, 16h31
  5. Réponses: 5
    Dernier message: 19/09/2005, 20h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo