Page 1 sur 1
double condition foreach
Posté : 14 mai 2015, 15:24
par banania
Bonjour,
J'ai un probleme : je n'arrive pas a mettre une double condition sur le foreach
En fait je récupere des données sur une API, et je tente de les trier (mais je n'y arrive pas x)
Je veut récuperer tous les match dont le status est FINISHED : c'est la ligne avec if (et c'est la le probleme)
sans cette ligne, j'obtient tous les match, et avec cela ne fonctionne plus ( erreur unspected -> à la ligne du if)
avez vous une solution ou des idées pour corriger cela?
(n'hésitez pas a demander des précisions, je ne savait pas trop comment décrire mon probleme)
Voici le code:
foreach ($fixtures->fixtures as $key => $value){
if ($fixtures->status==FINISHED)
echo('<tr>');
echo('<td>'.$value->homeTeamName.'</td>');
echo('<td>'.$value->result->goalsAwayTeam.'</a></td>');
echo('<td>'.$value->date.'</td>');
echo('<td>'.$value->awayTeamName.'</td>');
echo('<td>'.$value->result->goalsAwayTeam.'</td>');
echo('</tr>');
}
echo('</table>');
Re: double condition foreach
Posté : 14 mai 2015, 15:29
par Saian
Salut, FINISHED c'est quoi ? une constante ?
Re: double condition foreach
Posté : 14 mai 2015, 15:34
par tof73
il doit manquer le { à la fin de la ligne if
et le }
Re: double condition foreach
Posté : 14 mai 2015, 15:42
par Saian
Probablement tof73 mais pour l'erreur je pense que FINISHED n'est pas une constante et que c'est ce qui provoque l'erreur.
Re: double condition foreach
Posté : 14 mai 2015, 15:44
par banania
FINISHED c'est une valeur que prend status sur l'API,; c'est entre autre une valeur que l'on peut résupérer, disant si le match de foot et finit ou bien pas encore joué
(par exemple comme 'nombre de match joués par l'equipe' qui prend une valeur)
Re: double condition foreach
Posté : 14 mai 2015, 15:48
par Saian
Oui donc il semblerait bien que ce ne soit pas une constante.
Dans ce cas la ligne devrait être :
if ($fixtures->status == 'FINISHED')
Quand tu mets FINISHED sans guillemets ou apostrophes autour, il s'agit d'une constante qui en l’occurrence n'est certainement pas définie.
Et comme le suggère tof73 tu devrais probablement encapsuler tout le <tr></tr> dans des accolades du if.
Re: double condition foreach
Posté : 14 mai 2015, 15:49
par banania
ben je pense que vous avez raison parce que l'erreur est :use of undefined constant FINISHED
mais comment faire autrement?
Par exemple, sur l'api, j'ai la liste de tous les match de foot de ligue1 et je veut séparer tous les match finis des match pas encore joués, (comme si je voulais avoir tous les match ou il y eu 1 but)
Sur l'api, j'ai ca pour chaque match de ligue1 :
"date": "2014-08-08T18:30:00Z",
"status": "FINISHED",
"matchday": 1,
"homeTeamName": "Stade Reims",
"awayTeamName": "Paris SG",
"result": {
"goalsHomeTeam": 2,
"goalsAwayTeam": 2
Re: double condition foreach
Posté : 14 mai 2015, 15:52
par banania
j'ai fait ce que tu m'a proposé : le probleme n'est plus sur finished mais ca donne ca:
udefined property stdClass::$status
que veut dire udefined property?
Merci de votre aide
Re: double condition foreach
Posté : 14 mai 2015, 15:56
par Saian
Ca veut dire que tu essaies d'accéder à une propriété non définie sur l'objet.
D'après le code ça serait plutôt :
if ($value->status == 'FINISHED')
Et dans ce cas, $key n'étant jamais utilisé, j'écrirais plutôt :
foreach ($fixtures->fixtures as $game){
if($game->status == 'FINISHED') {
et remplacerais tous les $value par $game, le code n'en serait que plus lisible :
echo '<table>';
foreach ($fixtures->fixtures as $game) {
if($game->status == 'FINISHED') {
echo('<tr>');
echo('<td>'.$game->homeTeamName.'</td>');
echo('<td>'.$game->result->goalsAwayTeam.'</a></td>');
echo('<td>'.$game->date.'</td>');
echo('<td>'.$game->awayTeamName.'</td>');
echo('<td>'.$game->result->goalsAwayTeam.'</td>');
echo('</tr>');
}
}
echo('</table>');
EDIT
Petite modification de code.
Re: double condition foreach
Posté : 14 mai 2015, 16:12
par banania
ba du coup ca n'affiche rien en fait ^^
il n'y a pas d'erreur lorsque je remplace les $value par $fixtures, mais ca n'affiche plus rien.
EDIT
là, on a un unique match qui est répété plusieurs fois x) (il n'y a qu'un seul match en tout et pour tout)
Re: double condition foreach
Posté : 14 mai 2015, 16:17
par banania
http://api.football-data.org/alpha/socc ... 5/fixtures
voici le lien ou est pris les données
je ne sait plus comment j'ai fait pour que les données soient triées sur la page net
Re: double condition foreach
Posté : 14 mai 2015, 16:17
par Saian
Testes le code édité, à moins que je n'ai pas compris, ça devrait bien fonctionner.
Re: double condition foreach
Posté : 14 mai 2015, 16:19
par banania
CA MARCHE tes un dieu <3
Merci beaucoup de m'avoir aidé

Re: double condition foreach
Posté : 14 mai 2015, 16:23
par Saian
Je t'en prie. J'espère que tu as bien compris d'où venaient tes erreurs.
PS : tu peux t'épargner les parenthèses sur les echo.
echo '<table>';
foreach ($fixtures->fixtures as $game) {
if($game->status == 'FINISHED') {
echo '<tr>';
echo '<td>'.$game->homeTeamName.'</td>';
echo '<td>'.$game->result->goalsAwayTeam.'</a></td>';
echo '<td>'.$game->date.'</td>';
echo '<td>'.$game->awayTeamName.'</td>';
echo '<td>'.$game->result->goalsAwayTeam.'</td>';
echo '</tr>';
}
}
echo '</table>';