Bonjour,

Je cherche à me familiariser avec les API (que je ne connais pas du tout et j'essaie de me débrouiller avec ce que je trouve sur le net) et en extraire les données pour les mettre en forme en PHP.
Lorsque je fais un var_dump de ma variable de résultats, j'ai ceci (je ne mets que le résultat de l'index 0 pour éviter d'avoir un tableau démesuré après c'est la même chose pour le reste du tableau), j'ai ça :

array(1) {
  [243033]=>
  object(stdClass)#42 (1) {
    ["lineup"]=>
    object(stdClass)#21 (2) {
      ["home"]=>
      object(stdClass)#12 (4) {
        ["starting_lineups"]=>
        array(11) {
          [0]=>
          object(stdClass)#1 (3) {
            ["lineup_player"]=>
            string(15) "Ati-Zigi L. (G)"
            ["lineup_number"]=>
            string(2) "30"
            ["lineup_position"]=>
            string(1) "1"
          }

Ces infos sont récupérées via une variable $result (sur laquelle j'ai fait le var_dump) donnée par le site qui me fournit l'API
Lorsque je fais le traitement en PHP, je passe par une boucle foreach. Dans le cas présent, pour recupérer la donnée de lineup_player, ma boucle fait :

<?php foreach($result AS $joueurs) { 
        echo '<td>'.$joueurs->lineup->home->starting_lineups->lineup_player.'</td>';
  } 
 ?>

et la j'ai le message d'erreur suivant
Notice: Trying to get property 'lineup_player' of non-object in C:\xampp\htdocs\mon_projet\api\lineups.php on line 38

J'ai utilisé cette boucle foreach pour extraire des données "sans arborescences" (je veux dire avec le $joueurs, je n'avais qu'un paramètre, ça a fonctionné et la il faut que je passe 4 paramètres pour accéder à la donnée et je suis en difficulté - désolé si je n'utilise pas les bons termes, pour le moment je tatonne. C'est un projet qui me tient à coeur et j'aimerai y arriver).

Merci pour votre possible aide
Michel

4 réponses


Lartak
Réponse acceptée

La seconde boucle foreach, il te faut la faire à l'intérieur de la première étant donné que la variable $joueurs est définie au niveau de la première boucle, donc pour résumer :

foreach($result as $joueurs)
{
    foreach ($joueurs->lineup->home->starting_lineups as $starting_lineup)
    {
        echo $starting_lineup->lineup_player;
    }
}

Bonsoir.
starting_lineups est un tableau d'objets et non un simple objet, tu ne peux donc pas accéder directement aux propriétés de l'objet, donc soit tu utilises la clé 0 sur le tableau pour accéder aux propriétés suivantes si le tableau n'a pas une taille supérieure, dans le cas contraire il te faut boucler sur la propriété starting_lineups.
Donc soit :

echo $joueurs->lineup->home->starting_lineups[0]->lineup_player

Ou alors :

foreach ($joueurs->lineup->home->starting_lineups as $starting_lineup) {
    echo $starting_lineup->lineup_player;
}

Effectivemment avec le array(11) j'aurai pu "deviner" que c'était un tableau (enfin j'apprends, le fait de faire des erreurs de débutant me fait avancer).
J'ai testé ce que vous m'avez envoyé
le

echo $joueurs->lineup->home->starting_lineups[0]->lineup_player

me retourne bien la valeur désirée (c'est à dire le nom du joueur correspondant à la clé 0). Le

foreach ($joueurs->lineup->home->starting_lineups as $starting_lineup) {
    echo $starting_lineup->lineup_player;
}

utilisé seul (sans le 1er echo en fait je fais des tests pour voir comment ça fonctionne) me retourne les erreurs suivantes :

Notice: Undefined variable: joueurs in C:\xampp\htdocs\mon_projet\api\lineups.php on line 46

Notice: Trying to get property 'lineup' of non-object in C:\xampp\htdocs\mon_projet\api\lineups.php on line 46

Notice: Trying to get property 'home' of non-object in C:\xampp\htdocs\mon_projet\api\lineups.php on line 46

Notice: Trying to get property 'starting_lineups' of non-object in C:\xampp\htdocs\mon_projet\api\lineups.php on line 46

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\mon_projet\api\lineups.php on line 46

Et lorsque je mets l'ensemble , j'ai le nom du joueur correspondant à la clé 0 (le 1er echo) et la composition complète (la 2e boucle foreach). Composition complète que je n'ai pas en utilisant la 2e boucle foreach seule.

Merci pour votre réponse. Cela m'a permis de comprendre certaines choses et de continuer a apprendre !
Michel

Je n'avais même pas percuté qu'il fallait que je mette un foreach dans mon foreach de base. Je pensais que c'était une boucle indépendante.
C'est assez nickel maintenant.
Merci pour votre aide .. j'apprends des choses c'est cool.
Je vais pouvoir continuer a avancer sur mon projet.
Encore merci ;-)
Michel