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] tri tableau avec date


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut [Tableaux] tri tableau avec date
    bonjour,

    Voilà mon problème qui a l'air simple, mais pour petit débutant en php c'est une prise de tete !!!

    J'ai un tableau $tab avec 4 colonnes .
    la 1 ère colonne contient des dates $tab[0]
    la 2 émé colonne contient des noms $tab[1]
    la 3 ème colonne contien des prénoms $tab[2]
    la 4 ème colonne contient des adresses $tab[3]

    ex :

    24/09/2006 nom1 prenom1 adresse1
    20/09/2006 nom2 prenom2 adresse2
    12/09/2006 nom3 prenom3 adresse3
    15/09/2006 nom4 prenom4 adresse4
    10/09/2006 nom5 prenom5 adresse5


    <<<
    lorsque je passe la fonction sort($tab[0]) le résultat et le suivant :

    10/09/2006 nom1 prenom1 adresse1
    12/09/2006 nom2 prenom2 adresse2
    15/09/2006 nom3 prenom3 adresse3
    20/09/2006 nom4 prenom4 adresse4
    24/09/2006 nom5 prenom5 adresse5

    => il ne ma trié que la 1 ère colonne tab[0] ...
    >>>


    <<<
    lorsque je passe la fonction sort($tab) le résultat et le suivant :

    24/09/2006 nom1 prenom1 adresse1
    20/09/2006 nom2 prenom2 adresse2
    12/09/2006 nom3 prenom3 adresse3
    15/09/2006 nom4 prenom4 adresse4
    10/09/2006 nom5 prenom5 adresse5

    => aucun tri ...
    >>>

    Pouvez-vous m'aider ?
    Merci

  2. #2
    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
    <?php
     
    function compare($a, $b) {
       return strnatcmp($a[0], $b[0]);
    }
     
    usort($tab, 'compare');
     
    ?>
    http://php.net/usort

  3. #3
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Bonjour,

    J'ai réussit a faire ce que je voulais faire ( je l'ai fait sur 2 colonnes), mais le script est un peut long ...
    Le problème c'est que si je rajoute des colonnes, cela me rajoutera encore des lignes de codes...
    Je suis sur qu'il y a beaucoup plus , quequ'un peut 'il m'aider ou me mettre sur la voie ?
    Merci pour votre aide

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    <?
    $tab =array();
    $i = 0;
    $j = 0;
     
    $tab[0][0] = 3; $tab[0][1] = "C";
    $tab[1][0] = 1; $tab[1][1]  = "A";
    $tab[2][0] = 2; $tab[2][1] = "B";
    $tab[3][0] = 5; $tab[3][1] = "E";
    $tab[4][0] = 4; $tab[4][1] = "D";
     
    print_r($tab) ;
    echo "<br>";
     
    for( $i = 0 ,$total = count($tab) ; $i < $total;  $i++)
    	{
    	echo $tab[$i][0];  	
    	echo "<br>";
    	}
     
    for( $i = 0 ,$total = count($tab) ; $i < $total;  $i++)
    	{
    	 for ( $j = $i+1 ; $j < $total;  $j++)
    		{
    		if ( $tab[$i][0] < $tab[$j][0] )	
    			{
    			//PERMUTATION
     
    		$tempi = $tab[$i][0] ;
    		$tempi1 = $tab[$i][1];
     
    		$tempj = $tab[$j][0] ;
    		$tempj1 = $tab[$j][1] ;
     
     
    		$tab[$i][0] = $tempj;
    		$tab[$i][1] = $tempj1;
     
    		$tab[$j][0] = $tempi;
    		$tab[$j][1] = $tempi1;
     
    			}
    				}
    	}	
     
    print_r($tab) ;
     
    echo $tab[0][0] ; echo "<br>";echo $tab[0][1] ;echo "<br>";
    echo $tab[1][0] ; echo "<br>";echo $tab[1][1] ;echo "<br>";
    echo $tab[2][0] ; echo "<br>";echo $tab[2][1];echo "<br>";
    echo $tab[3][0] ; echo "<br>";echo $tab[3][1];echo "<br>";
    echo $tab[4][0] ; echo "<br>";echo $tab[4][1];echo "<br>";
     
     
    ?>
    RESULTAT :
    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
     
    Array ( [0] => Array ( [0] => 3 [1] => C ) [1] => Array ( [0] => 1 [1] => A ) [2] => Array ( [0] => 2 [1] => B ) [3] => Array ( [0] => 5 [1] => E ) [4] => Array ( [0] => 4 [1] => D ) ) 
    3
    1
    2
    5
    4
    Array ( [0] => Array ( [0] => 5 [1] => E ) [1] => Array ( [0] => 4 [1] => D ) [2] => Array ( [0] => 3 [1] => C ) [3] => Array ( [0] => 2 [1] => B ) [4] => Array ( [0] => 1 [1] => A ) ) 5
    E
    4
    D
    3
    C
    2
    B
    1
    A

  4. #4
    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
    Merci d'utiliser les balises [code]

    Ma proposition ne te plait pas ?

  5. #5
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Mr N.
    Merci d'utiliser les balises [code]

    Ma proposition ne te plait pas ?
    Au contraire je suis content que l'on me donne une solution !!!
    En fait je suis débutant en php et programation, et j'ai pu a réussit à comprendre comment implémenter ta solution ! Et pourtant je suis sur que ca doit etre tres simple ...?

  6. #6
    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
    Ben un simple copier-coller devrait suffir

  7. #7
    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
    C'est malin, tu m'as mis un doute

    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
    <?
    $tab =array();
     
    $tab[0][0] = 3; $tab[0][1] = "C";
    $tab[1][0] = 1; $tab[1][1] = "A";
    $tab[2][0] = 2; $tab[2][1] = "B";
    $tab[3][0] = 5; $tab[3][1] = "E";
    $tab[4][0] = 4; $tab[4][1] = "D";
     
    // AVANT
    print_r($tab) ;
     
    function compare($a, $b) {
       return strnatcmp($a[0], $b[0]);
    }
     
    usort($tab, 'compare');
     
    // APRES
    print_r($tab) ;
     
    ?>
    AVANT :
    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
     
    Array
    (
        [0] => Array
            (
                [0] => 3
                [1] => C
            )
     
        [1] => Array
            (
                [0] => 1
                [1] => A
            )
     
        [2] => Array
            (
                [0] => 2
                [1] => B
            )
     
        [3] => Array
            (
                [0] => 5
                [1] => E
            )
     
        [4] => Array
            (
                [0] => 4
                [1] => D
            )
     
    )
    APRES :
    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
     
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
            )
     
        [1] => Array
            (
                [0] => 2
                [1] => B
            )
     
        [2] => Array
            (
                [0] => 3
                [1] => C
            )
     
        [3] => Array
            (
                [0] => 4
                [1] => D
            )
     
        [4] => Array
            (
                [0] => 5
                [1] => E
            )
     
    )

  8. #8
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Avant de passer le sujet à l'état résolu je voulais tout simplement te remercier , car cette solution est tout simplement ecellente!!! Plus je me met au PHP et plus je découvre que l'on peut faire beaucoup de choses avec ce language , et qu'il est important de bien connaître les fonctions , car facilite beaucoup.

    Merci encore!



    Citation Envoyé par Mr N.
    C'est malin, tu m'as mis un doute

    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
    <?
    $tab =array();
     
    $tab[0][0] = 3; $tab[0][1] = "C";
    $tab[1][0] = 1; $tab[1][1] = "A";
    $tab[2][0] = 2; $tab[2][1] = "B";
    $tab[3][0] = 5; $tab[3][1] = "E";
    $tab[4][0] = 4; $tab[4][1] = "D";
     
    // AVANT
    print_r($tab) ;
     
    function compare($a, $b) {
       return strnatcmp($a[0], $b[0]);
    }
     
    usort($tab, 'compare');
     
    // APRES
    print_r($tab) ;
     
    ?>
    AVANT :
    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
     
    Array
    (
        [0] => Array
            (
                [0] => 3
                [1] => C
            )
     
        [1] => Array
            (
                [0] => 1
                [1] => A
            )
     
        [2] => Array
            (
                [0] => 2
                [1] => B
            )
     
        [3] => Array
            (
                [0] => 5
                [1] => E
            )
     
        [4] => Array
            (
                [0] => 4
                [1] => D
            )
     
    )
    APRES :
    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
     
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => A
            )
     
        [1] => Array
            (
                [0] => 2
                [1] => B
            )
     
        [2] => Array
            (
                [0] => 3
                [1] => C
            )
     
        [3] => Array
            (
                [0] => 4
                [1] => D
            )
     
        [4] => Array
            (
                [0] => 5
                [1] => E
            )
     
    )

  9. #9
    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
    J'espère seulement que tu ne te contente pas du copier coller et que tu as compris comment marchait usort
    Sinon voir la doc http://php.net/usort

  10. #10
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par Mr N.
    J'espère seulement que tu ne te contente pas du copier coller et que tu as compris comment marchait usort
    Sinon voir la doc http://php.net/usort
    si j'ai bien compris la fonction usort , elle tri un tableau suivant la fonction passer en paramètre. Mais j'avoue qu'il y ajust un petit détail qui méchape , c'est comment elle fait pour garder la correpondance d'une ligne de tableau quand elle la déplace ?

  11. #11
    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
    c'est magique

    Plus sérieusement elle applique un algorithme qui se sert de la fonction 'compare' pour déterminer si une ligne va avant ou après une autre.

    Pour des exemples d'algorithmes susceptibles d'etre utilisés :
    http://fr.wikipedia.org/wiki/Algorithme_de_tri

  12. #12
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Merci por ton aide
    J'ai décider de me faire mal à la tête et de jeter un coup d'oeil sur ton lien sur les Algorithme de tri. C'est marrant quand j'étais en cours j'ai toujours zappé les algoritmes, et maintant je voit que ça me manque énormément, et ça m'interesse!!!

    Citation Envoyé par Mr N.
    c'est magique

    Plus sérieusement elle applique un algorithme qui se sert de la fonction 'compare' pour déterminer si une ligne va avant ou après une autre.

    Pour des exemples d'algorithmes susceptibles d'etre utilisés :
    http://fr.wikipedia.org/wiki/Algorithme_de_tri

  13. #13
    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
    C'est pourtant la base de tout dévelopement

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

Discussions similaires

  1. [Tableaux] tri tableau avec fonction
    Par ascito dans le forum Langage
    Réponses: 7
    Dernier message: 10/09/2008, 14h21
  2. [Tableaux] tri tableau php
    Par billebo dans le forum Langage
    Réponses: 16
    Dernier message: 09/03/2007, 13h40
  3. [Tableaux] Remplir tableau avec ordre defini
    Par nicerico dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2006, 10h28
  4. [Tableaux] Tri tableau avec underscore et chiffres
    Par __fabrice dans le forum Langage
    Réponses: 4
    Dernier message: 18/10/2006, 17h05
  5. [Tableaux] Tri tableau
    Par licorne dans le forum Langage
    Réponses: 3
    Dernier message: 20/03/2006, 12h14

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