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 :

Trier un tableau [Encodage]


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
    Février 2003
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 795
    Par défaut Trier un tableau
    Bonjour à tous.

    Je souhaite trier un tableau en PHP avec chaine de caractères.

    Voici la définition de mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $tableau[0] = "image-1.jpg"
    $tableau[1] = "image-2.jpg"
    $tableau[2] = "image-10.jpg"
    $tableau[3] = "image-3.jpg"
    Quand je trie le tableau, via

    J'obtiens ceci dans le tableau :
    image-1.jpg
    image-10.jpg
    image-2.jpg
    image-3.jpg
    alors que je souhaiterais obtenir

    image-1.jpg
    image-2.jpg
    image-3.jpg
    image-10.jpg
    Bref, les chiffres de la chaine de caractères sont traités comme une chaine de caractères. Le problème c'est que les chiffres peuvent se trouver n'importe où dans la chaine, je ne peux donc pas dire que seul les 2 derniers chiffres avant le ".jpg" soit triés comme numériques.

    Y'a-t-il une fonction simple qui pourrait m'aider dans ce cas-ci ?

    Merci d'avance,

  2. #2
    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
    hello,

    natsort() est ton ami

  3. #3
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Un sort devrait marcher :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
     
    sort($array1);
    echo "Standard sorting\n";
    print_r($array1);
     
    natsort($array2);
    echo "\nNatural order sorting\n";
    print_r($array2);

    Standard sorting
    Array
    (
    [0] => img1.png
    [1] => img10.png
    [2] => img12.png
    [3] => img2.png
    )

    Natural order sorting
    Array
    (
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
    )

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 795
    Par défaut
    Je vois le problème.

    Le tri pat NATSORT fonctionne bien. il m'affiche bien le bon ordre.

    Par contre quand je veux récupérer les infos c'est là que ça se complique.

    En effet, je souhaite :

    1. Trier le tableau
    2. Affiche le tableau dans l'ordre des enregistrements donc :

    Tableau[0]
    Tableau[1]
    Tableau[2]
    etc..

    Mais en fait le tri se fait uniquement sur l'affichage et il ne remplace pas les indices du tableau.

    Comment donc passer d'un enregistrement à l'autre (avec l'indice des éléments du tableau trié) donc dans ce cas-ci, comme votre exemple :

    Tableau[3]
    Tableau[2]
    Tableau[1]

  5. #5
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Comment procèdes tu ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sort($ton_tab);
    // ou
    natsort($ton_tab);

    change ton tableau et reaffecte les index si necessaire. Montre nous ton code stp

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 795
    Par défaut
    Je fait bien un NATSORT.

    Quand je fait un print_r(tableau) il m'affiche bien les images dans l'ordre souhaité :

    [19] => administration/photos_biens/129/V066.1-1.JPG
    [1] => administration/photos_biens/129/V066.1-2.JPG
    [5] => administration/photos_biens/129/V066.1-3.JPG
    [2] => administration/photos_biens/129/V066.1-5.JPG
    [18] => administration/photos_biens/129/V066.1-6.JPG
    [12] => administration/photos_biens/129/V066.1-7.JPG
    [17] => administration/photos_biens/129/V066.1-8.JPG
    [13] => administration/photos_biens/129/V066.1-9.JPG
    [16] => administration/photos_biens/129/V066.1-10.JPG
    [9] => administration/photos_biens/129/V066.1-11.JPG
    [8] => administration/photos_biens/129/V066.1-12.JPG
    [3] => administration/photos_biens/129/V066.1-13.JPG
    [4] => administration/photos_biens/129/V066.1-14.JPG
    [7] => administration/photos_biens/129/V066.1-15.JPG
    [10] => administration/photos_biens/129/V066.1-16.JPG
    [15] => administration/photos_biens/129/V066.1-17.JPG
    [11] => administration/photos_biens/129/V066.1-18.JPG
    [14] => administration/photos_biens/129/V066.1-19.JPG
    [6] => administration/photos_biens/129/V066.1-20.JPG
    [
    Le problème que j'ai c'est que ensuite je dois afficher les images dans l'ordre trié.

    Mais je ne sais pas par quel indice commencer !

    En effet, je pensais qu'une fois le tableau trié, il réécrivait sur le tableau avec les indices dans l'ordre, ce qui n'est pas le cas. Il laisse le tableau telquel mais modifie juste l'affichage de celui-ci.

    Comment parcourir mon tableau alors ?

    Avant je faisais juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for($i=0;$i<20;$i++)
    {
    echo $tableau[$i];
    }
    Il faudrait donc que je sache quel est le premier indice (donc dans ce cas-ci : indice 19, 1, 5, 2, etc..)
    Y'a-t-il une fct qui permet de déterminer l'ordre d'indice de l'affichage du tableau ?

  7. #7
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    si tu parcours le tableau avec http://php.net/foreach, tu ne devrais pas avoir de problème

  8. #8
    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
    Au pire des cas, si foreach n'est pas possible dans ton cas, tu peux réindexer ton tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $monTableau = array_values( $monTableau );
    Edit : Mais dans ton cas, foreach() semble adapté.

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

Discussions similaires

  1. [Débutant] Trier un tableau en 2 boucles
    Par SaladinDev dans le forum Assembleur
    Réponses: 9
    Dernier message: 07/05/2005, 23h38
  2. Trier un tableau par rapport à un autre tableau
    Par deaven dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 02/05/2005, 10h27
  3. [Débutant] Remplir et trier un tableau
    Par james-dean dans le forum Assembleur
    Réponses: 15
    Dernier message: 01/05/2005, 18h40
  4. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 01h04
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 17h51

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