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] un sort qui trie mal


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Par défaut [Tableaux] un sort qui trie mal
    Bonjour à tous!
    Bon, avant que le grand match commence, j'ai un petit problème à vous soumettre :
    Je récupère un tableau Array ( [136] => 1 [152] => 0 [157] => 0 [163] => 0 [65] => 0 [84] => 0 [196] => 0 [154] => 0 [153] => 0 [155] => 0 [165] => 0 )
    Les clés de ce tableau correspondent à des index d'une table MySQL, qui sont déjà triés.
    Maintenant, ce que j'aimerais faire, c'est trier suivant les valeurs, mais quand celles-ci sont égales, que je garde l'ordre pré-établit.
    Suis pas sur que ça soit bien clair, donc, dans l'exemple que je viens de donner, je voudrais avoir : Array ( [152] => 0 [157] => 0 [163] => 0 [65] => 0 [84] => 0 [196] => 0 [154] => 0 [153] => 0 [155] => 0 [165] => 0 [136] => 1 )
    J'ai donc pensé à la fonction asort... Ben non, perdu! La fonction asort me donne ceci : Array ( [154] => 0 [153] => 0 [155] => 0 [165] => 0 [196] => 0 [84] => 0 [152] => 0 [157] => 0 [163] => 0 [65] => 0 [136] => 1 ). Les clés ne sont plus dans l'ordre que je désire, à valeurs égales...
    J'ai essayé de comprendre la fonction array_multisort... mais j'ai abandonné, parce que je ne comprends rien à ce qu'il y a d'écrit, et malgré de nombreuses tentatives, le résultat donné n'est pas celui recherché...
    Quelqu'un aurait une suggestion?
    P.S.: pourquoi mon code ressort-il aussi mal? Fais-je quelque chose qu'il ne faut pas?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Par défaut
    Bonjour,

    je te conseille d'utiliser la fonction usort qui te permet d'utiliser une fonction que tu auras défini toi même pour pouvoir ordonner ton tableau comme tu l'entends, sinon, il me semble qu'il n'y a pas de fonctions native php te permettant de faire ce que tu veux, quant à array_multisort il suffit de s'habituer à sa syntaxe, une fois maitrisée c'est une fonction très puissante pour faire des tris selon plusieurs critères.

    PS : Sort() ne trie pas mal ! elle ne fait que ce qu'on lui demande

    Bon courage,


    Fred

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Par défaut
    Ben, ce que j'aurais voulu que sort face, c'est garder le même ordre initial en cas d'égalité. Donc, sort trie mal
    J'ai essayé usort également. Sauf que je n'ai pas bien compris comment fonctionnait cette fonction non plus.
    Je n'arrive pas à récupérer les clés, mais uniquement les valeurs! Alors, mon tableau est peut être trié suivant les valeurs, mais je ne connais plus du tout les clés, et je ne peux pas les retrouver

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Par défaut
    Bon, alors, voila comment j'ai réussi à résoudre mon problème.
    Mais franchement, je trouve ça minable, parce que php est incapable de trier un tableau correctement, c est fou!
    Bon, donc au départ, je pensais avoir un tableau comme ca : Array ( [136] => 1 [152] => 0 [157] => 0 [163] => 0 [65] => 0 [84] => 0 [196] => 0 [154] => 0 [153] => 0 [155] => 0 [165] => 0 ); mais en définitive, pour faire ce que je voulais, il a fallu que je fasse 2 tableaux
    lk = Array ( [0] => 136 [1] => 152 [2] => 157 [3] => 163 [4] => 65 [5] => 84 [6] => 196 [7] => 154 [8] => 153 [9] => 155 [10] => 165 )
    et lv = Array ( [0] => 1 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 )
    A chaque fois que je récupère une nouvelle valeur dans les tableaux, je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $lk[] = $ligne['id'];
                $lv[] = $lev;
                $lk = tri($lk,$lv);
                sort($lv);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function tri($leskey,$tableau){
            $i = count($tableau) - 1;
            while(($i > 0) && ($tableau[$i] < $tableau[$i - 1])){
                $val = $leskey[$i];
                $leskey[$i] = $leskey[$i - 1];
                $leskey[$i - 1] = $val;
                $val = $tableau[$i];
                $tableau[$i] = $tableau[$i - 1];
                $tableau[$i - 1] = $val;
                $i--;
            }
            return $leskey;
        }
    Je sais, c'est totalement bidon, mais c'est la seule solution que j'ai pu trouver qui fasse ce que je demandais à la base.
    Alors si quelqu'un a une solution plus propre, je suis toute ouie!
    Ciao

  5. #5
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    en PHP tu as les fonctions *sort* qui peuvent trier sur les clé ou les valeurs, et converser l'ordre associatif.

    en gros je verrais bien un tri sur tes valeurs d'abord, et apres sur tes clés ...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Par défaut
    Sauf que le tri sur les clés ne doit pas se faire!
    Si tu veux, les clés que je récupère correspondent à des index d'une table, et à des titres de livre.
    Je récupère donc le tableau trié... donc il faudrait pas que ça me trie les clés par ordre croissant ou décroissant, ça servirait à rien.

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

Discussions similaires

  1. le Sorting du GridView qui trie pas
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 15/07/2008, 17h47
  2. [XSLT]xsl:sort qui classe mal les éléments (apostrophe)
    Par strat0 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 31/07/2007, 15h14
  3. un DELETE qui fonctionne mal
    Par HULK dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/02/2006, 19h59
  4. [SQL] une requete qui fait mal a la tete
    Par MailOut dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/02/2005, 17h22

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