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 :

Tri d'un tableau


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut Tri d'un tableau
    Bonjour,

    pour une galerie d'images, j'ai le contenu d'un répertoire qui est trié ainsi :
    array_multisort($images, SORT_ASC, SORT_REGULAR);

    Le résultat donne d'abord par noms de fichiers commençant par des chiffres, puis par des capitales et enfin par des minuscules.

    J'aimerais n'avoir que les chiffres puis les lettres (sans différenciation majuscules/minuscules).
    Comment faire ?

    Merci
    PAul

  2. #2
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    peut être avec natcasesort ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    Merci pour la suggestion. J'y ai cru, mais ça ne fonctionne toujours pas pour moi...

    J'ai mis : natcasesort($images);
    et à vrai dire je ne comprends pas l'ordre sorti (ça paraît un peu en vrac)

    J'ai mal fait ?

    Voici le code original :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (($f = readdir($dh)) !== false) {
    	if((substr(strtolower($f),-3) == 'jpg') || (substr(strtolower($f),-3) == 'gif') || (substr(strtolower($f),-3) == 'png')) {
    		$noimage++;
    		$images[] = array('filename' => $f);
    		array_multisort($images, SORT_ASC, SORT_REGULAR);
    	}
    }

  4. #4
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    je ne connais pas vraiment les flags disponibles et leur action exact vu que j' n'ai pas souvenir avoir déjà utilisé array_multisort(), donc je me permet de te proposer une alternative à cette fonction qui permet de faire à peu près tout et n'importe quoi en terme de tri, usort().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function Trier(& $a, & $b)
    {
        return strtolower($a) > strtolower($b) ? 1 : -1;
    }
     
    usort($image, 'Trier');
    C'est à tester, voir à adapter, mais il me semble que php sait faire une comparaison lexicale avec les opérateurs de comparaison standards.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    C'est étrange :
    ta proposition marche très bien en local,
    mais dès que je la mets en ligne j'ai l'alerte :
    Warning: usort() [function.usort]: The argument should be an array in...

  6. #6
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    a mon avis, le problème ne doit pas venir de la fonction mais de ton parametre $image...

    Rajoute juste avant le usort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!is_array($images))
       die("c'est bien ce que je pensait, image n'est pas un tableau !");

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    Pourtant ça ne change rien ni en local ni en ligne :
    toujours le message Warning: usort() [function.usort]: The argument should be an array in...

    Une autre idée ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Controle ce que vaut ta variable :
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    - En ligne : toujours les mêmes alertes...
    - En local j'obtiens :
    array(1) { [0]=> array(1) { ["filename"]=> string(13) "0potager2.jpg" } } array(2) { [0]=> array(1) { ["filename"]=> string(13) "0potager2.jpg" } [1]=> array(1) { ["filename"]=> string(12) "P1000019.jpg" } } array(3) { [0]=> array(1) { ["filename"]=> string(13) "0potager2.jpg" } [1]=> array(1) { ["filename"]=> string(12) "P1000019.jpg" } [2]=> array(1) { ["filename"]=> string(12) "P1000051.jpg" } } array(4) { [0]=> array(1) { ["filename"]=> string(13) "0potager2.jpg" } [1]=> array(1) { ["filename"]=> string(12) "P1000019.jpg" } [2]=> array(1) { ["filename"]=> string(12) "P1000051.jpg" } [3]=> array(1) { ["filename"]=> string(12) "potager6.jpg" } } array(5) { [0]=> array(1) { ["filename"]=> string(13) "0potager2.jpg" } [1]=> array(1) { ["filename"]=> string(12) "P1000019.jpg" } [2]=> array(1) { ["filename"]=> string(12) "P1000051.jpg" } [3]=> array(1) { ["filename"]=> string(12) "potager6.jpg" } [4]=> array(1) { ["filename"]=> string(22) "salle-polyvalente1.jpg" } } array(6) { [0]=> array(1) { ["filename"]=> string(13) "0potager2.jpg" } [1]=> array(1) { ["filename"]=> string(12) "P1000019.jpg" } [2]=> array(1) { ["filename"]=> string(12) "P1000051.jpg" } [3]=> array(1) { ["filename"]=> string(12) "potager6.jpg" } [4]=> array(1) { ["filename"]=> string(22) "salle-polyvalente1.jpg" } [5]=> array(1) { ["filename"]=> string(13) "ZP1000550.jpg" } }

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Que donne la var_dump en ligne ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    Le même qu'avant. C'est à dire (pour la 1ere ligne de Warning seulement) :
    Warning: usort() [function.usort]: The argument should be an array in /homez.212/xxxx/www/plugins/content/jwsig.php on line 115
    array(1) { [0]=> array(1) { ["filename"]=> string(12) "P1000019.jpg" } }

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu te simplifierais la vie en n'ayant pas un sous-niveau d'un seul element :
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    j'ai fait mais en ligne je récupère toujours le
    Warning: usort() [function.usort]: The argument should be an array

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu n'a qu'un seul élément dans ton tableau image, donc pas de deuxieme élément a comparer au premier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    749
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 749
    Par défaut
    Evidemment dit comme ça, on comprend mieux !

    Mais pourquoi ça fonctionne (pas d'alerte me disant que ce n'est pas un Array) avec :
    array_multisort($images, SORT_ASC, SORT_REGULAR);

    En fait c'est juste ce tri-là que je voudrais simplifier 0-9 puis a-z...
    (case insensitive)

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Tu peux fortement te simplifier la vie en quelques lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $totalContenuDossierImages = glob( 'mon/Dossier/Images/*' ); // renvoie un array, même s'il y a rien
    $listeFichiersImages = preg_grep( '`(jpg|gif|png)$`' , $totalContenuDossierImages ); // renvoie un array, même s'il n'y a aucune image
    natcasesort( $listeFichiersImages ); // trie les fichiers (ou rien) avec un algo insensible à la casse

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