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

PHP & Base de données Discussion :

Tri d'un tableau [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut Tri d'un tableau
    Bonjour, j'ai une erreur qui revient, il semblerait que ca vienne du "foreach".
    l'erreur est la suivante: "Cannot use a scalar value as an array"
    si quelqu'un avait une solution à me proposer,
    merci

    Code php : 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
    48
    49
    50
    51
    52
     
    $cla = "select clu.numClub as club, clu.nomClub as equipe 
    	  from tab_club clu 
    	  join tab_club_champ cha 
    	  on cha.numClub=clu.numClub 
    	  where cha.refChamp=".$champ;
    $rcla = mysql_query($cla, $connexion);
     
    $numero=0;
    while ($ligne=mysql_fetch_array($rcla, MYSQL_ASSOC))
    {
    	$numero=$numero+1;
    	$numclub=$ligne['club'];
    	$equipe=$ligne['equipe'];
    	include "./requetessql.php";
    	$nbvic=$lvicDom['vicDom']+$lvicExt['vicExt'];
    	$nbnul=$lnulDom['nulDom']+$lnulExt['nulExt'];
    	$nbdef=$ldefDom['defDom']+$ldefExt['defExt'];
    	$nbmatchs=$nbvic+$nbnul+$nbdef;
    	$nbpoints=(4*$nbvic)+(2*$nbnul)+(1*$nbdef);
    	$bp=$lbutsDom['butsPourDom']+$lbutsExt['butsPourExt'];
    	$bc=$lbutsDom['butsContreDom']+$lbutsExt['butsContreExt'];
    	$diff=$bp-$bc;
     
    $tab[]=array($numclub, $equipe, $nbpoints, $nbmatchs, $nbvic, $nbnul, $nbdef, $bp, $bc, $diff);
    }
     
    //remplacer colonnes par lignes
    foreach($tab as $cle => $li)
    {
    	$numclub[$cle]=$li[$numclub];
    	$equipe[$cle]=$li[$equipe];
    	$nbpoints[$cle]=$li[$nbpoints];
    	$nbmatchs[$cle]=$li[$nbmatchs];
    	$nbvic[$cle]=$li[$nbvic];
    	$nbnul[$cle]=$li[$nbnul];
    	$nbdef[$cle]=$li[$nbdef];
    	$bp[$cle]=$li[$bp];
    	$bc[$cle]=$li[$bc];
    	$diff[$cle]=$li[$diff];
    }
     
    //trier le tableau
    array_multisort($nbpoints, sort_desc, sort_numeric, $bp, sort_desc, sort_numeric);	
     
    //affichage
    echo "<table>";
    for ($i=0; i<sizeOf($numclub); $i++) 
    {
      echo "<tr><td>".$numClub[$i]."</td><td>".$nomClub[$i]."</td><td>".$nbPoints[$i]."</td><td>".$nbButsPour[$i]."</td></tr>\n";
    }
    echo "</table>";

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Si c'est le foreach qui génère ce message ça veut dire qu'à un moment donné tu essaies de boucler sur $tab et que ce n'est pas un tableau.
    Dans ta portion de code on ne voit pas l'initialisation de $tab, penses-y.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    J'ai beau cherché mais je ne vois pas d'où ça peut provenir, est ce que vous auriez une solution?

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Es-tu sûr d'avoir au moins un résultat à ta requête ? Car si tu n'as aucun résultat, ton script ne passera pas par la boucle while et $tab n'est pas défini.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    oui je suis sur d'avoir un résultat a ma requete, puisque j'ai déja afficher le classement mais sans le classer suivant ce que je souhaitais, à savoir par nombre de points d'une équipe. J'ai bien défini $tab en faisant un $tab=array(); avant la boucle while.
    puis dans la boucle while, je fais un tableau pour récupérer chaque résultat de la requete. (Le numéro du club l'équipe, le nombre de points et le reste sont récupérer à l'aide d'autres requetes qui fonctionnent puisque je les ai testé)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tab[]=array($numclub, $equipe, $nbpoints, $nbmatchs, $nbvic, $nbnul, $nbdef, $bp, $bc, $diff);
    Je pense que c'est le foreach qui peche mais je ne vois ou est une éventuelle erreur.

  6. #6
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Un foreach fonctionne comme ca
    foreach($montableau as $cle => $valeur)
    {

    }

    or toi tu utilises $valeur comme si c'était un tableau (tu fais $li[$numclub])

    Je ne comprends vraiment pas ce que tu fais dans ton foreach mais il faut le modifier en tout cas.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je crois qu'il fait un tableau de tableaux (enfin qu'il essaye) et que c'est pour ça que $li se comporte en tableau.
    Mais moi je suis larguée, désolée
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    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
    foreach($tab as $cle => $li)
    {
    	$numclub[$cle]=$li[$numclub];
    	$equipe[$cle]=$li[$equipe];
    	$nbpoints[$cle]=$li[$nbpoints];
    	$nbmatchs[$cle]=$li[$nbmatchs];
    	$nbvic[$cle]=$li[$nbvic];
    	$nbnul[$cle]=$li[$nbnul];
    	$nbdef[$cle]=$li[$nbdef];
    	$bp[$cle]=$li[$bp];
    	$bc[$cle]=$li[$bc];
    	$diff[$cle]=$li[$diff];
    }
     
    //trier le tableau
    array_multisort($nbpoints, sort_desc, sort_numeric, $bp, sort_desc, sort_numeric);	
     
    //affichage
    echo "<table>";
    for ($i=0; i<sizeOf($numclub); $i++) 
    {
      echo "<tr><td>".$numClub[$i]."</td><td>".$nomClub[$i]."</td><td>".$nbPoints[$i]."</td><td>".$nbButsPour[$i]."</td></tr>\n";
    }
    echo "</table>";
    Ca m'etonnerai que les 2 $numClub soit les meme

    Et pourquoi un sizeOf sur $numclub?

  9. #9
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    Je m'explique:

    -dans le while je récupère les données de cette manière la
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $tab[] = array('numclub' => 1, 'nomclub' => 'EQUIPE 1', 'nbpoints' => 45, 
    'bp' => 12, ...);
    $tab[] = array('numclub' => 2, 'nomclub' => 'EQUIPE 2', 'nbpoints' => 22,
    'bp' =>  7, ...);
    $tab[] = array('numclub' => 3, 'nomclub' => 'EQUIPE 3', 'nbpoints' => 42, 
    'bp' => 19, ...);
    ...

    j'ai vu dans la doc que la fonction array trie "horizontalement" les données, par conséquent, je fais un foreach pour tranformer les colonnes du tableau en lignes.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach ($tab as $cle => $li) 
    {
        $numclub[$cle] = $li['numclub'];
        $nomclub[$cle] = $li['nomclub'];
        $nbpoints[$cle]   = $li['nbpoints'];
        $bp[$cle] = $li['bp'];
        ...
    }

    ensuite, je trie les lignes du tableau par nombre de points
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    array_multisort(
        $nbpoints, SORT_DESC, SORT_NUMERIC,
        $bp, SORT_DESC, SORT_NUMERIC,
        $numclub,
        $nomclub);

    enfin, je fais une boucle for pour afficher les résultats
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for ($i=0; i<sizeOf($numclub); $i++) 
    {
     echo "<tr><td>".$numclub[$i]."</td><td>".$nomclub[$i]."</td>";
     echo "<td>".$nbpoints[$i]."</td><td>".$bp[$i]."</td></tr>\n";
    }

    j'aimerais que ca fasse cela, j'espère que ca pourra "vous aider à m'aider"

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    Je ne vois pas..
    Essai de faire des echo avant et apres tes boucles pour voir si les données sont bien transmise et si elles sortent bien....

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Si tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $numclub[$cle] = $li['numclub'];
    $nomclub[$cle] = $li['nomclub'];
    $nbpoints[$cle]   = $li['nbpoints'];
    ...
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $numclub[$cle] = $li[$numclub];
    $nomclub[$cle] = $li[$nomclub];
    $nbpoints[$cle]   = $li[$nbpoints];
    dans ton foreach, ça ne fonctionne pas mieux ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    c'est ce qu'il a fais

    j'ai vu dans la doc que la fonction array trie "horizontalement" les données, par conséquent, je fais un foreach pour tranformer les colonnes du tableau en lignes.
    Code php :

    foreach ($data as $cle => $li) { $numclub[$cle] = $li['numclub']; $nomclub[$cle] = $li['nomclub']; $nbpoints[$cle] = $li['nbpoints']; $bp[$cle] = $li['bp']; ... }

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par afrodje
    c'est ce qu'il a fais
    Pas dans le premier code qu'il a donné. C'est pour ça que je demande si il y a eu un changement.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    célira merci pour ta réponse j'ai deja testé beaucoup de choses et ta proposition en fait parti. c'est sans succès.
    j'ai toujours la meme erreur pour toutes les lignes du foreach sauf pour numclub et equipe.
    "Warning: Cannot use a scalar value as an array in"

  15. #15
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    As-tu, avant ton foreach, indiqué que $numbclub est un tableau ?

    essaies de faire le foreach juste pour $numclub deja (commentes le reste)

  16. #16
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    en effet, j'avais oublié de déclarer les tableaux pour accueillir le numclub, equipe, nbpoints, etc...
    Code php : 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
     
    $numclub=array('numclub');
    $equipe=array('equipe');
    $nbpoints=array('nbpoints');
    $nbmatchs=array('nbmatchs');
    $nbvic=array('nbvic');
    $nbnul=array('nbnul');
    $nbdef=array('nbdef');
    $bp=array('bp');
    $bc=array('bc');
    $diff=array('diff');
     
    foreach($tab as $cle => $li)
    {
    	$numclub[$cle]=$li['numclub'];
    	$equipe[$cle]=$li['equipe'];
    	$nbpoints[$cle]=$li['nbpoints'];
    	$nbmatchs[$cle]=$li['nbmatchs'];
    	$nbvic[$cle]=$li['nbvic'];
    	$nbnul[$cle]=$li['nbnul'];
    	$nbdef[$cle]=$li['nbdef'];
    	$bp[$cle]=$li['bp'];
    	$bc[$cle]=$li['bc'];
    	$diff[$cle]=$li['diff'];
    }

    je n'ai plus d'erreur au niveau du foreach, mais il y en a une pour le array_multisort qui est la suivante:
    "Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in ..."

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

Discussions similaires

  1. Tri d'un tableau en 2D
    Par sniperseb dans le forum C
    Réponses: 4
    Dernier message: 05/01/2006, 16h33
  2. Réponses: 6
    Dernier message: 16/09/2005, 10h30
  3. tri d'un tableau à 2 dimensions
    Par dede92 dans le forum C
    Réponses: 4
    Dernier message: 19/02/2005, 18h29
  4. [langage] Probleme de tri d'un tableau de tableau
    Par Ludo167 dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2004, 10h32
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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