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 tableau associatif [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut Tri tableau associatif
    Bonjour j'essaye de trier ce tableau par 'delais de livraison'


    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
    Array
    (
        [toto] => Array
            (
                [0] => Array
                    (
                        [product_name] => Box Feuillage
                        [delais_livraison] => 10
                    )
     
                [2] => Array
                    (
                        [product_name] => Étoiles
                        [delais_livraison] => 25
                    )
     
            )
     
        [tata] => Array
            (
                [1] => Array
                    (
                        [product_name] => Grenouillère
                        [delais_livraison] => 7
                    )
     
                [4] => Array
                    (
                        [product_name] => Chaussons
                        [delais_livraison] => 0
                    )
     
            )
     
        [titi] => Array
            (
                [3] => Array
                    (
                        [product_name] => Set de lit
                        [delais_livraison] => 3
                    )
     
            )
     
    )
    Je vois pas trop comment je peux faire je suis allé voir du coté de usort .. mais je que ça soit sa ..

  2. #2
    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
    Comment doit être trié le premier niveau (toto, tata) ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    Voici le résultat attendu

    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
    Array
    (
        [toto] => Array
            (
                [0] => Array
                    (
    		      [product_name] => Box Feuillage
    		      [delais_livraison] => 10
                    )
     
                [2] => Array
                    (
     
    		    [product_name] => Étoiles
                        [delais_livraison] => 25
     
                    )
     
            )
     
        [tata] => Array
            (
                [1] => Array
                    (
    		    [product_name] => Chaussons
                        [delais_livraison] => 0
     
                    )
     
                [4] => Array
                    (
                        [product_name] => Grenouillère
                        [delais_livraison] => 7
                    )
     
            )
     
        [titi] => Array
            (
                [3] => Array
                    (
                        [product_name] => Set de lit
                        [delais_livraison] => 3
                    )
     
            )
     
    )

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    mais je crois que mon tableau est peut être mal foutu aussi...

  5. #5
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Voici qui devrait te convenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    array_walk($array, function(&$val) {
        usort($val, function($a,$b) {
            return $a['delais_livraison'] - $b['delais_livraison'];
        });
    });

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    je comprends pas a quoi correspond $val ?

  7. #7
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    "$val" est un nom arbitraire, la fonction array_walk va parcourir ton tableau et va appliquer la fonction passée en paramètre (de manière anonyme) sur chaque "valeur" (que l'on nomme "val", mais ou pourrait très bien l'appeler $toto, ou $a tout simplement) de ton array.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    j'ai essayé d'appliquer ta fonction comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    array_walk($shipping_detail, function(&$val) {
    		usort($val, function($a,$b) {
    		return $a['delais_livraison'] - $b['delais_livraison'];
    	});
    });
    sauf que je me tape une erreur sur cette ligne

    Parse error: syntax error, unexpected T_FUNCTION in

  9. #9
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Ta version de Php doit être < 5.3, or les fonctions anonymes ne sont disponibles qu'à partir de cette version.

    Tu dois déclarer explicitement tes fonctions (et le rend du coup carrément moins glamour) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            function beginTri(&$val) {
                usort($val, 'trier');
            }
     
            function trier($a, $b) {
                return $a['delais_livraison'] - $b['delais_livraison'];
            }
     
            array_walk($shipping_detail, 'beginTri');

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    Warning: array_walk() [function.array-walk]: Unable to call beginTri() - function does not exist
    et pourtant il est bien au dessus ....

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 146
    Par défaut
    c'est bon j'ai trouvé j'ai oublié de préciser que j’étais dans une classe il fallait que je passe mes fonctions de callback en static

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

Discussions similaires

  1. Tri tableau associatif
    Par lebanner82 dans le forum Langage
    Réponses: 1
    Dernier message: 05/03/2014, 15h57
  2. Tri tableau associatif multidimension
    Par bender86 dans le forum Langage
    Réponses: 5
    Dernier message: 07/12/2011, 23h20
  3. [Tableaux] fusion et tri tableau associatif
    Par Florent08800 dans le forum Langage
    Réponses: 3
    Dernier message: 16/10/2006, 17h23
  4. Afficher un tableau associatif trié
    Par peuf23 dans le forum Langage
    Réponses: 2
    Dernier message: 05/07/2006, 18h14
  5. [langage] TRI TABLEAU ASSOCIATIF
    Par proner dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2003, 17h38

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