Bonjour,

J'ai un problème (certainement basique et tout bête) mais je n'arrive pas a le solutionner.
Je travaille sur une API foot.
Cette API me donne les classements des championnats (Nom de l'équipe, Points, Matchs joués, Matchs nuls, Matchs perdu, Nombre de buts marqués, Nombre de buts encaissés et Différence de buts).
Elle ne donne pas la position dans le classement (tout bêtement une numérotation de 1 à n (selon le nombre d'équipes dans le championnat).

Pour afficher des données Json de l'API absolument aucun souci. Tout fonctionne nickel.
Mon souci c'est la numérotation de 1 à n
Je numérote bien en fonction du nombre d'équipe mais je n'arrive pas a placer le rang a coté d'une et une seule equipe.

Mes données sont affichées a l'aide d'une boucle foreach() et chacune d'entre-elles sont dans un tableau 'classique' (table - tr - td ...).

Pour le rang j'ai essayé ma condition dans une boucle for, une boucle while et une boucle do while. la numérotation de 1 à n se fait pour chaque équipe. J'ai mis la boucle dans dans le foreach, à l'extérieur du foreach il n y a rien qui va.

Voici les conditions que j'ai essayé (pour un championnat à 18 équipes)

// ma boucle do... while
$rang = 1;
    do
         {
            echo '<td>'.$rang . '</td><br />';
                     $rang++;
          }
 while( $rang <=18 );

// ma boucle while
 $rang = 1;
 while( $rang <=18 ){
            echo '<td>'.$rang++. '</td><br />';
          }
// ma boucle for     
   for($rang=1;$rang<=18;$rang++){
   echo '<td>'.$rang. '</td><br />';
          }

j'ai placé ces 3 boucles a l'intérieur du foreach (a l'emplacement ou je souhaite afficher le rang)

Voici le code du tableau

 $table = file_get_contents("adresse donnée par l'API qui fonctionne puisque j'ai toutes les données affichées");
 $parsedTable = json_decode($table,true);
 foreach ($parsedTable['table'] as $classements) {
 echo '<table>';
          echo '<tbody>';
                   echo '<tr>';
                           echo "J'ai placé mes boucles avec le $rang à cet endroit";
                           echo '<td>';
                            include '../library/equipes_classements.php'; //ici c'est un fichier externe contenant un switch case traduisant le noms des équipes
                            echo '</td>';
                            echo '<td>'.$classements['total']. '</td>';
                            echo '<td>'.$classements['played']. '</td>';
                            echo '<td>'.$classements['win']. '</td>';
                            echo '<td>'.$classements['draw']. '</td>';
                            echo '<td>'.$classements['loss']. '</td>';
                            echo '<td>'.$classements['goalsfor']. '</td>';
                            echo '<td>'.$classements['goalsagainst']. '</td>';
                            echo '<td>'.$classements['goalsdifference']. '</td>';
echo '</tr>';
       echo '</tbody>';
              echo '</table>';
}

Et mon problème c'est que la numérotation de 1 à 18, je l'obtiens pour chacune des équipes
donc

1 2 3 ... 18 NOM DE L'EQUIPE 1
1 2 3 ... 18 NOM DE L'EQUIPE 2
1 2 3 ... 18 NOM DE L'EQUIPE 3

etc.. jusque l'équipe 18
Merci si quelqu'un peut m'aider (je ne sais pas si j'ai merdé dans les boucles ou si je ne les ai pas incluses au bon endroit dans mon code)

12 réponses


Carouge10
Réponse acceptée

non, non, non
seul le foreach suffit


$rang = 1;
foreach ($parsedTable['table'] as $classements) {
// code
echo $rang;
// code
$rang++;
}

Bonsoir,
il faut te serviir de la boucle foreach avec à l'intérieur un compteur, comme tu l'as fait pour les boucles while et do/while


foreach {
 echo $rang;
 // tes affichages
 $rang++;
 }

oui pardon, j'ai fait à la va-vite
la condition, tu l'as déjà, elle ne change pas

dans la boucle foreach déjà existente ? ou inclure une boucle foreach dans la boucle foreach ?

celle déjà existante

Bien c'est ce que j'ai déjà fait non ?

mon code te montre en gros comment devrait être ton "gros" foreach

le $rang++ se met tout a la fin (après avoir intégré tous les echo) ?

oui ou juste après l'avoir affiché.
tout dépant de combien de fois tu l'affiches par ligne

Mais il faut que je passe par une boucle while ? (2 jours que je me prends le chou la dessus). un truc du genre
foreach(...){
while{
}
mes echo;
$rang++;
}

Effectivement ça fonctionne ... Moi qui me cassait a essayer des créer des boucles ... quel idiot :-(
Merci, j'ai le résultat que je souhatais avoir

parfait, tu peux passer le sujet en résolu