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] array_multisort multi-dimensionnel: Je sèche


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 85
    Par défaut [Tableaux] array_multisort multi-dimensionnel: Je sèche
    Bonjour,

    je n'arrive pas bien à saisir la syntaxe de array_multisort et à l'appliquer sur mon tableau.

    C'est un tableau qui contient des produits,Il se compose en gros ainsi :
    $tablo[$i] -> Séparation au niveau des catégories
    $tablo[$i][0] -> Info sur la catégorie
    $tablo[$i][$i2] -> Le produit

    Une 3eme dimension est présente pour avoir plusieurs paramètres ainsi :
    $tablo[$i][$i2]['nom']
    $tablo[$i][$i2]['supplement']
    $tablo[$i][$i2]['id']
    etc.

    Exemple en pratique : (j'improvise) (la valeur de "supplement" est entre ( ) )
    $tablo[0][0]['nom'] : Processeurs
    $tablo[0][1]['nom']: CPU INTEL (+20)
    $tablo[0][2]['nom']: CPU IBM (+40)

    $tablo[1][0]['nom'] : Disques durs
    $tablo[1][1]['nom']: D.d Maxtor (+ 50)
    $tablo[1][2]['nom'] : D.d IBM (+10)
    etc.

    Je dois trier la deuxième dimension de mon tableau en fonction de la 3eme dimension "supplement". Ainsi dans mon exemple les produits restent dans la catégorie qui leur correspond mais sont triés en fonction du supplément.
    Donc dans mon exemple processeur ne bouge pas, mais dans disque dur le d.d Ibm passe devant le d.d maxtor si je trie en croissant.


    Le problème c'est que je ne sais pas comment définir ça avec array_multisort j'ai essayé plusieurs combinaisons et je n'y arrive pas !
    Le $tablo[$i][0] qui est la catégorie doit rester en place mais bon ça n'est pas un problème en définissant un supplément de -1 si jamais mais je n'arrive pas à trouver la syntaxe pour ce array_multisort.

    Merci de votre aide !

  2. #2
    Expert confirmé 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
    Par défaut
    Je me permet de modifier la structure de ton tableau afin de le rendre plus cohérent :
    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
     
    <pre><?php
     
    $tablo = array();
    $tablo[] = array('description' => 'Processeurs', 'produits' => array()); 
    $tablo[] = array('description' => 'Disques Durs', 'produits' => array()); 
     
    $tablo[0]['produits'][] = array('id' => 123, 'nom' => 'CPU INTEL', 'supplement' => '+20');
    $tablo[0]['produits'][] = array('id' => 124, 'nom' => 'CPU IBM', 'supplement' => '+40');
     
    $tablo[1]['produits'][] = array('id' => 213, 'nom' => 'D.d Maxtor', 'supplement' => '+50');
    $tablo[1]['produits'][] = array('id' => 132, 'nom' => 'D.d IBM', 'supplement' => '+10');
     
     
    var_dump($tablo);
     
    function compare_produits($a, $b) {
        return (int)$a['supplement'] - (int)$b['supplement'];
    }
     
    foreach($tablo as $key => $categorie) {
        usort($tablo[$key]['produits'], 'compare_produits');
    }
     
    var_dump($tablo);
     
    ?>
    Ce qui donne 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Array
    (
        [0] => Array
            (
                [description] => Processeurs
                [produits] => Array
                    (
                        [0] => Array
                            (
                                [id] => 123
                                [nom] => CPU INTEL
                                [supplement] => +20
                            )
     
                        [1] => Array
                            (
                                [id] => 124
                                [nom] => CPU IBM
                                [supplement] => +40
                            )
     
                    )
     
            )
     
        [1] => Array
            (
                [description] => Disques Durs
                [produits] => Array
                    (
                        [0] => Array
                            (
                                [id] => 213
                                [nom] => D.d Maxtor
                                [supplement] => +50
                            )
     
                        [1] => Array
                            (
                                [id] => 132
                                [nom] => D.d IBM
                                [supplement] => +10
                            )
     
                    )
     
            )
     
    )
    Après :
    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
     
    Array
    (
        [0] => Array
            (
                [description] => Processeurs
                [produits] => Array
                    (
                        [0] => Array
                            (
                                [id] => 123
                                [nom] => CPU INTEL
                                [supplement] => +20
                            )
     
                        [1] => Array
                            (
                                [id] => 124
                                [nom] => CPU IBM
                                [supplement] => +40
                            )
     
                    )
     
            )
     
        [1] => Array
            (
                [description] => Disques Durs
                [produits] => Array
                    (
                        [0] => Array
                            (
                                [id] => 132
                                [nom] => D.d IBM
                                [supplement] => +10
                            )
     
                        [1] => Array
                            (
                                [id] => 213
                                [nom] => D.d Maxtor
                                [supplement] => +50
                            )
     
                    )
     
            )
     
    )
    Hope this helps

  3. #3
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    je vois pas la différence entre "Avant" et "Après".... erreur de copier/coller ?

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    euh regardes mieux

  5. #5
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    arf oui

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 85
    Par défaut
    Merci bien ! J'ai organisé mon tableau à ta manière puis utilisé tes fonctions et ça marche très bien.
    Par contre je ne comprends pas très bien le fonctionnement de usort que je ne connaissais pas, j'ai eu beau lire la doc cela reste obscure.

  7. #7
    Expert confirmé 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
    Par défaut
    usort trie un tableau suivant une fonction donnée.
    Vois ton tableau comme un ensemble d'élément. la fonction en question apporte une relation d'ordre à cet ensemble. autrement dit, si je prend deux éléments, elle me permet de dire lequels est "plus petit" que l'autre... Cette fonction sera donc utilisée dans l'algorithme de tri de usort, afin d'ordonner les éléments.

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 85
    Par défaut
    Oki merci pour vos réponses je m'en vais trier tout ça.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/10/2006, 19h49
  2. [Tableaux] Tableau multi dimensionnel
    Par gids01 dans le forum Langage
    Réponses: 7
    Dernier message: 02/10/2006, 17h18
  3. [Tableaux] Tableaux multi dimensionnels
    Par ludovik dans le forum Langage
    Réponses: 13
    Dernier message: 23/05/2006, 18h11
  4. [Tableaux] Les tableaux multi-dimensionnels
    Par ludovik dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2006, 13h21
  5. [Tableaux] tri sur un tableau multi-dimensionnel
    Par nicoaix dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2006, 22h23

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