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] Comment trier un tableau d'objets sur un champ précis


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut [Tableaux] Comment trier un tableau d'objets sur un champ précis
    Bonjour,

    J'ai un tableau d'objets (requete) que je souhaite trier sur un champ précis, (DF_RQ_TITRE), le 3è sur 3, un champ texte à trier par ordre alphabétique. Comment manier une fonction du type sort() avec des objets et un champ ciblé précis ?
    Exemple de print_r sur mon tableau :
    Array (
    [0] => requete Object ( [DF_RQ_ID] => 16 [DF_RQ_TYPE] => famille [DF_RQ_TITRE] => manger des prunes )
    [1] => requete Object ( [DF_RQ_ID] => 33 [DF_RQ_TYPE] => famille [DF_RQ_TITRE] => fouiller les affaires )
    [2] => requete Object ( [DF_RQ_ID] => 17 [DF_RQ_TYPE] => famille [DF_RQ_TITRE] => attraper des moustiques )
    [102] => requete Object ( [DF_RQ_ID] => 34 [DF_RQ_TYPE] => astuce [DF_RQ_TITRE] => téléphone gratuit )
    [103] => requete Object ( [DF_RQ_ID] => 39 [DF_RQ_TYPE] => astuce [DF_RQ_TITRE] => retrouver ses clefs )
    [242] => requete Object ( [DF_RQ_ID] => 15 [DF_RQ_TYPE] => offre [DF_RQ_TITRE] => vos DVD )
    [243] => requete Object ( [DF_RQ_ID] => 92 [DF_RQ_TYPE] => offre [DF_RQ_TITRE] => whisky)
    )
    Cela fait 3 jours que je m'acharne et ne pige rien.
    Si quelqu'un a une idée qui peut me débloquer, merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Et la FAQ ??? si tu y avais jetté un oeil tu aurais trouvé ta réponse : http://php.developpez.com/faq/?page=...ab_trimultidim

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut fonction CMP
    Bonjour,

    Merci
    J'avais déjà vu cette fonction.
    function cmp2($a,$b) {
    if ($a[2] == $b[2])
    return 0;
    return ($a[2] > $b[2]) ? -1 : 1;
    }
    usort($total, "cmp2");
    Mais elle ne marche pas.
    Peut-être parce que mon tableau n'est pas du type :
    $tab = array(array(5,6,2),array(3,7,1)); mais
    $tab = array([0] => requete Object ( [DF_RQ_ID] => 66 [DF_RQ_TYPE] => offre [DF_RQ_TITRE] => lingerie pas chère ) [1] => requete Object ( [DF_RQ_ID] => 46 [DF_RQ_TYPE] => offre [DF_RQ_TITRE] => lingerie fine ));

  4. #4
    Invité
    Invité(e)
    Par défaut
    Et quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function objvarcmp(&$a,&$b) {
        $ret=strcasecmp($a->DF_RQ_TITRE, $b->DF_RQ_TITRE);
        return ( $ret == 0 ? 0 : ($ret < 0 ? -1 : 1));
    }
     
    usort($tab, "objvarcmp");

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Merci : majuscule, accent, "string"...
    Bonjour,

    Merci beaucoup, cela fonctionne.
    J'étais passé par des fonctions traditionnelles pour éviter d'avoir à gérer ce tableau d'objet. Mais je voulais quand même résoudre ce problème...

    Je m'étais heurté à d'autres problèmes : majuscule en début de mot, accent, et même le terme "string" (synonyme de culotte) dans un champ qui force à afficher ce champ en premier. Seul le champ "string" n'a pas pu être résolu.
    Tu as une idée pour résoudre le problème du terme "string", et aussi de la manière d'appliquer ces fonctions (qui marchent sur un tableau simple) à mon tableau d'objets ?

    $array_lowercase = array_map('strtolower', $tableau);// majuscule
    function sansaccent($chaine)
    {
    return strtr($chaine,
    'àâäåãáÂÄÀÅÃÁæÆçÇéèêëÉÊËÈïîìíÏÎÌÍñÑöôóòõÓÔÖÒÕùûüúÜÛÙÚÿ',
    'aaaaaaaaaaaaaacceeeeeeeeiiiiiiiinnoooooooooouuuuuuuuy');
    }
    $array_lowercase2 = array_map('sansaccent', $array_lowercase);// sans accent
    array_multisort($array_lowercase2, SORT_ASC, SORT_STRING,$tableau);// tri

    Sinon, tant pis, c'est déjà très sympa que tu m'ais expliqué.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/02/2009, 14h08
  2. Réponses: 3
    Dernier message: 27/01/2009, 18h17
  3. [Tableaux] comment trier un tableau multidimensionnel
    Par tibotibo69 dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2008, 17h04
  4. Réponses: 3
    Dernier message: 15/03/2007, 12h09
  5. Réponses: 1
    Dernier message: 14/09/2006, 10h53

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