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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 122
    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 éprouvé Avatar de ciesco
    Inscrit en
    Février 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 110
    Par défaut
    T'as fait echo sur $tablo pour voir ce qu'il ya dedans?

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

  4. #4
    Membre éclairé 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
    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

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 122
    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 chevronné Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    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+

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 122
    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 confirmé 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
    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 chevronné Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    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 ...

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

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    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 ;-)

+ 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