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] Trier un tableau de chaînes sur le dernier mot des chaînes


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 8
    Points
    8
    Par défaut [Tableaux] Trier un tableau de chaînes sur le dernier mot des chaînes
    Bonjour,
    voici mon problème, j'ai un fichier dont chaque ligne est du type "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    blablaa blabab blablac blablad ... <un nombre (exemple 125)>
    ", et je voudrais pouvoir trier ces lignes sur ce nombre en fin de ligne par ordre décroissant mais n'étant que débutant en php je ne sais pas trop comment m'y prendre.

    Tout d'abord ce que j'ai commencer à faire :

    Lorsque je parcours ce fichier, je met chaque ligne dans un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $i=0;
    $fd=fopen($file, "r");
        while (!feof($fd)){
            $ligne = fgets($fd);
            $tablignes[$i]=$ligne;
            $i=$i+1;
            ...
        }
    Ensuite je ne sais pas vraiment quelle direction je dois prendre ...
    j'ai pensé découper la ligne à chaque espace (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lignedecoupe = explode(" ", $ligne);
    ) dans un tableau mais ensuite je ne sais pas comment appliquer une fonction de type sort pour afficher les lignes entières triées sur ce nombre stocké dans la derniere case du tableau $lignedecoupe.

    Il m'est possible d'extraire ce nombre à part aussi -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre = array_pop(explode(' ', $ligne));
    mais je ne sais pas si cela est utile.

    Merci d'avance pour vos réponses.

  2. #2
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Salut, il suffit de passer par la fonction usort() qui trie les tableaux multi dimensionels.

    Voilà un exemple :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    $string = array(
    	"Un petit citron",
    	"Un grand abricot",
    	"Un joli poussin",
    	"Un super chien",
    	"Un immense poisson",
    	"Un magnifique lièvre",
    );
     
    function sort_by_last_word($string)
    {
    	$ary = array();
    	foreach ($string AS $line)
    	{
    		$ary[] = explode(' ', $line);
    	}
     
    	usort($ary, '_sort_by_last_word');
    	foreach ($ary AS $k => $v)
    	{
    		$ary[$k] = implode(' ', $v);
    	}
    	return ($ary);
    }
     
    function _sort_by_last_word($a, $b)
    {
    	return (strcmp($a[count($a) - 1], $b[count($b) - 1]));
    }
     
    $ary = sort_by_last_word($string);
     
    echo '<pre>';
    print_r($ary);
    echo '</pre>';
    ?>

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
     
    $lignes = array(
        "Je suis très émue de vous dire que j'ai           1",
        "bien compris l'autre soir que vous aviez         13",
        "toujours une envie folle de me faire              2",
        "danser. Je garde le souvenir de votre            14",
        "baiser et je voudrais bien que ce soit            3",
        "là une preuve que je puisse être aimée           15",
        "par vous. Je suis prête à vous montrer mon        4",
        "affection toute désintéressée et sans cal-       16",
        "cul, et si vous voulez me voir aussi              5",
        "vous dévoiler sans artifice mon âme              17",
        "toute nue, venez me faire une visite.             6",
        "Nous causerons en amis, franchement.             18",
        "Je vous prouverai que je suis la femme            7",
        "sincère, capable de vous offrir l'affection      19",
        "la plus profonde comme la plus étroite            8",
        "amitié, en un mot la meilleure preuve            20",
        "que vous puissiez rêver, puisque votre            9",
        "âme est libre. Pensez que la solitude où j'ha-   21",
        "bite est bien longue, bien dure et souvent       10",
        "difficile. Ainsi en y songeant j'ai l'âme        22",
        "grosse. Accourez donc vite et venez me la        11",
        "faire oublier par l'amour où je veux me          23",
        "mettre.                                          12"
    );
     
    function trier($a, $b) {
       return strnatcmp(array_pop(explode(' ', $a)), array_pop(explode(' ', $b)));
    }
     
    usort($lignes, 'trier');
     
    echo implode("   <br>\n", $lignes);
     
    ?>
    (Qu'est ce qu'on rigole avec Georges Sand )

    La fonction http://php.net/file te permettra de lire le contenu d'un fichier dans un tableau...

  4. #4
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Merci !

    Ca m'aide beaucoup !! je teste ca pour vous dire.

    ----------------------------------------------------


    EDIT : Je me suis servi de la 2ème proposition, je l'ai adapté et tout fonctionne comme je le souhaitais ...

    Merci encore.

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

Discussions similaires

  1. [Tableaux] Trier un tableau sur 2 élements!
    Par GYK dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2008, 15h30
  2. Réponses: 8
    Dernier message: 14/11/2007, 10h27
  3. Réponses: 5
    Dernier message: 13/06/2006, 11h08
  4. [Tableaux] Trier un tableau [array]
    Par clemsouz dans le forum Langage
    Réponses: 2
    Dernier message: 15/05/2006, 13h33
  5. [Tableaux] Trier un tableau comme avec ORDER BY DESC
    Par Anduriel dans le forum Langage
    Réponses: 28
    Dernier message: 08/12/2005, 18h50

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