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 :

[Tableaux] Problème invalid argument foreach()


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 122
    Points : 74
    Points
    74
    Par défaut [Tableaux] Problème invalid argument foreach()
    Bonjour,
    dans script en php j'ai une fonction crée un tableau et qui le trie
    [code]
    function cmp2($a,$b) {
    if ($a['diff'] == $b['diff'])
    return 0;
    return ($a['diff'] > $b['diff']) ? -1 : 1;
    }
    function cmp1($a,$b) {
    if ($a['Pts'] == $b['Pts'])
    return cmp2($a,$b);
    return ($a['Pts'] > $b['Pts']) ? -1 : 1;
    }

    function classe($groupe,$A,$B,$C,$D,$eq1,$eq2,$eq3,$eq4,$eq5,$eq6,$eq7,$eq8,$eq9,$eq10,$eq11,$eq12){
    $G_A = 0;
    $N_A = 0;
    $P_A = 0;
    $Bp_A = 0;
    $Bc_A = 0;
    $Pts_A = 0;
    $G_B = 0;
    $N_B = 0;
    $P_B = 0;
    $Bp_B = 0;
    $Bc_B = 0;
    $Pts_B = 0;
    $G_C = 0;
    $N_C = 0;
    $P_C = 0;
    $Bp_C = 0;
    $Bc_C = 0;
    $Pts_C = 0;
    $G_D = 0;
    $N_D = 0;
    $P_D = 0;
    $Bp_D = 0;
    $Bc_D = 0;
    $Pts_D = 0;

    // du traitement pour alimenter les variables
    $tablo = array();
    $tablo[] = array('Equipe' => $A,'G' => $G_A,'N' => $N_A,'P' => $P_A,'Bp' => $Bp_A,'Bc' => $Bc_A,'Pts' => $Pts_A,'diff' => ($Bp_A - $Bc_A));
    $tablo[] = array('Equipe' => $B,'G' => $G_B,'N' => $N_B,'P' => $P_B,'Bp' => $Bp_B,'Bc' => $Bc_B,'Pts' => $Pts_B,'diff' => ($Bp_B - $Bc_B));
    $tablo[] = array('Equipe' => $C,'G' => $G_C,'N' => $N_C,'P' => $P_C,'Bp' => $Bp_C,'Bc' => $Bc_C,'Pts' => $Pts_C,'diff' => ($Bp_C - $Bc_C));
    $tablo[] = array('Equipe' => $D,'G' => $G_D,'N' => $N_D,'P' => $P_D,'Bp' => $Bp_D,'Bc' => $Bc_D,'Pts' => $Pts_D,'diff' => ($Bp_D - $Bc_D));

    usort($tablo, "cmp1");
    }

    [code]

    Ensuite dans ma partie HTML, je fais appel à la fonction

    [/code]
    <?php
    classe('A','Allemagne','Costa Rica','Pologne','Equateur',$a_eq1,$a_eq2,$a_eq3,$a_eq4,$a_eq5,$a_eq6,$a_eq7,$a_eq8,$a_eq9,$a_eq10,$a_eq11,$a_eq12);
    foreach($tablo as $elem) {
    print("<tr>");
    print("<td> {$elem['Equipe']} </td>");
    ?>
    <td> 3 </td>
    <?php
    print("<td> {$elem['G']} </td>");
    print("<td> {$elem['N']} </td>");
    print("<td> {$elem['P']} </td>");
    print("<td> {$elem['Bp']} </td>");
    print("<td> {$elem['Bc']} </td>");
    print("<td> {$elem['Pts']} </td>");
    print("</tr>");
    }
    ?>
    &#91;code&#93;

    J'ai le message d'erreur : Invalid argument supplied foreach()

    Merci de votre aide.&#91;/code&#93;

  2. #2
    Membre habitué Avatar de ciesco
    Inscrit en
    Février 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 110
    Points : 127
    Points
    127
    Par défaut
    T'as fait echo sur $tablo pour voir ce qu'il ya dedans?

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    lorsque je fais echo $tablo il renvoi Array

  4. #4
    Membre averti Avatar de hisy
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 377
    Points : 353
    Points
    353
    Par défaut
    FAis plutot un print_r($tablo) ou un var_dump() ...

    Un echo sur un tableau devrait te retourner array ... rien de plus
    Take it HiSy

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    En faisant un print_r($tablo) il me renvoi :

    ( [0] => Array ( [Equipe] => Costa Rica [G] => 3 [N] => 0 [P] => 0 [Bp] => 5 [Bc] => 1 [Pts] => 9 [diff] => 4 ) [1] => Array ( [Equipe] => Pologne [G] => 1 [N] => 1 [P] => 1 [Bp] => 3 [Bc] => 4 [Pts] => 4 [diff] => -1 ) [2] => Array ( [Equipe] => Allemagne [G] => 0 [N] => 2 [P] => 1 [Bp] => 2 [Bc] => 3 [Pts] => 2 [diff] => -1 ) [3] => Array ( [Equipe] => Equateur [G] => 0 [N] => 1 [P] => 2 [Bp] => 3 [Bc] => 5 [Pts] => 1 [diff] => -2 ) )


    qu'est ce qui ne va pas plus loin dans le foreach pour l'affichage ?
    Merci.

  6. #6
    Membre confirmé Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    Points : 587
    Points
    587
    Par défaut
    Salut à toi,

    Le problème vient de ce que ton tableau est multidimensionnel.

    dans la doc php j'ai trouvé ceci :

    /* exemple foreach 4 : tableaux multi-dimensionnels */

    $a[0][0] = "a";
    $a[0][1] = "b";
    $a[1][0] = "y";
    $a[1][1] = "z";

    foreach($a as $v1) {
    foreach ($v1 as $v2) {
    print "$v2\n";
    }
    }
    Essaye comme ça, on ne sait jamais

    A+
    Lu kinze d' awousse, la Vierje arandje û dusbrôle lu timp.

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    cela ne change rien, j'ai toujours le même message.

    avant que je fasse ma fonction classe, cela fonctionnait.
    j'ai voulu faire une fonction car je vais avoir 8 fois la même chose à faire

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut Re: Problème invalid argument foreach()
    Juste pour la lisibilité, j'ai du mal avec un code non indenté
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    function cmp2($a,$b) {
        if ($a['diff'] == $b['diff'])
            return 0;
        return ($a['diff'] > $b['diff']) ? -1 : 1;
    }
    function cmp1($a,$b) {
        if ($a['Pts'] == $b['Pts'])
            return cmp2($a,$b);
        return ($a['Pts'] > $b['Pts']) ? -1 : 1;
    }
     
    function classe($groupe,$A,$B,$C,$D,$eq1,$eq2,$eq3,$eq4,$eq5,$eq6,$eq7,$eq8,$eq9,$eq10,$eq11,$eq12){
    	$G_A = 0;
    	$N_A = 0;
    	$P_A = 0;
    	$Bp_A = 0;
    	$Bc_A = 0;
    	$Pts_A = 0;
    	$G_B = 0;
    	$N_B = 0;
    	$P_B = 0;
    	$Bp_B = 0;
    	$Bc_B = 0;
    	$Pts_B = 0;
    	$G_C = 0;
    	$N_C = 0;
    	$P_C = 0;
    	$Bp_C = 0;
    	$Bc_C = 0;
    	$Pts_C = 0;
    	$G_D = 0;
    	$N_D = 0;
    	$P_D = 0;
    	$Bp_D = 0;
    	$Bc_D = 0;
    	$Pts_D = 0;
     
    // du traitement pour alimenter les variables
                     $tablo = array();
    	$tablo[] = array('Equipe' => $A,'G' => $G_A,'N' => $N_A,'P' => $P_A,'Bp' => $Bp_A,'Bc' => $Bc_A,'Pts' => $Pts_A,'diff' => ($Bp_A - $Bc_A));
    	$tablo[] = array('Equipe' => $B,'G' => $G_B,'N' => $N_B,'P' => $P_B,'Bp' => $Bp_B,'Bc' => $Bc_B,'Pts' => $Pts_B,'diff' => ($Bp_B - $Bc_B));
    	$tablo[] = array('Equipe' => $C,'G' => $G_C,'N' => $N_C,'P' => $P_C,'Bp' => $Bp_C,'Bc' => $Bc_C,'Pts' => $Pts_C,'diff' => ($Bp_C - $Bc_C));
    	$tablo[] = array('Equipe' => $D,'G' => $G_D,'N' => $N_D,'P' => $P_D,'Bp' => $Bp_D,'Bc' => $Bc_D,'Pts' => $Pts_D,'diff' => ($Bp_D - $Bc_D));
     
    	usort($tablo, "cmp1");	
    }

    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
     
    <?php
    			classe('A','Allemagne','Costa Rica','Pologne','Equateur',$a_eq1,$a_eq2,$a_eq3,$a_eq4,$a_eq5,$a_eq6,$a_eq7,$a_eq8,$a_eq9,$a_eq10,$a_eq11,$a_eq12);
    			foreach($tablo as $elem) {
    				print("<tr>");
    				print("<td> {$elem['Equipe']} </td>");
    			?>
    				<td> 3 </td>
    			<?php
    				print("<td> {$elem['G']} </td>");
    				print("<td> {$elem['N']} </td>");
    				print("<td> {$elem['P']} </td>");
    				print("<td> {$elem['Bp']} </td>");
    				print("<td> {$elem['Bc']} </td>");
    				print("<td> {$elem['Pts']} </td>");
    				print("</tr>");
    			}	
    			?>

  9. #9
    Membre confirmé Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    Points : 587
    Points
    587
    Par défaut
    Je dirais que ta fonction classe ne retourne rien

    Essaye un peu :
    A la fin de la fonction, juste après le usort
    dans ta partie html tu appelles ta fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tablo=classe(.....          );
    foreach ...
    Lu kinze d' awousse, la Vierje arandje û dusbrôle lu timp.

  10. #10
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, comme l'a dit gilmaire, ta fonction classe ne retourne aucune valeur : $tablo est défnie dans la fonction dans elle n'a qu'une portée locale à cette fonction. Tu devrais donc faire comme il te l'a indiqué pour que ça marche

    Petite réctification, remplace
    par
    Bon développement ;-)
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

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

Discussions similaires

  1. [MySQL] Problème de Foreach : Warning: Invalid argument supplied for foreach()
    Par bidoo1234 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 06/05/2010, 17h56
  2. [Tableaux] Invalid argument supplied for foreach()
    Par kifouillou dans le forum Langage
    Réponses: 10
    Dernier message: 16/05/2008, 16h53
  3. [Tableaux] Invalid argument supplied for foreach
    Par Lionel57 dans le forum Langage
    Réponses: 1
    Dernier message: 20/12/2007, 13h15
  4. Réponses: 11
    Dernier message: 19/05/2006, 11h41
  5. [Tableaux] Problème de foreach avec des checkboxes
    Par nanor21 dans le forum Langage
    Réponses: 10
    Dernier message: 15/05/2006, 01h04

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