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 :

Je cale sur le tri d'un tableau [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Je cale sur le tri d'un tableau
    Bonjour à tous,

    Soit le tableau suivant :

    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
     
    Array
    (
        [1238] => Array
            (
                [4] => 181
                [5] => 189
                [6] => 176
                [7] => 152
                [8] => 147
                [9] => 132
                [10] => 173
                [11] => 168
                [12] => 160
            )
     
        [1242] => Array
            (
                [4] => 209
                [5] => 244
                [6] => 218
                [7] => 242
                [8] => 173
                [9] => 204
                [10] => 315
                [11] => 198
                [12] => 197
            )
     
        [1241] => Array
            (
                [4] => 154
                [5] => 217
                [6] => 183
                [7] => 204
                [8] => 151
                [9] => 170
                [10] => 206
                [11] => 196
                [12] => 180
            )
     
        [1240] => Array
            (
                [4] => 5
                [5] => 9
                [6] => 3
                [7] => 7
                [8] => 10
                [9] => 8
                [10] => 4
                [11] => 9
                [12] => 5
            )
    )
    les clés sont des id de produits et les sous_tableaux associés ont des mois comme clés et des ventes comme valeurs.
    La partie ci-dessus n'est qu'une petite partie du tableau, qui comporte 600 produits. L'idée est que je voudrais éliminer les clés et tableaux associés dont la somme des ventes est inférieure à 300. Dans mon exemple la clé 1240 devra être supprimée.
    Mais je tourne en rond.
    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    ça tient en deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sums = array();
    array_walk($data, function($v, $k) use (&$sums) { (($sum = array_sum($v)) >= 300) ? ($sums[$k] = $sum) : ''; });
    et pour conserver tes données initiales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sums = array();
    array_walk($data, function($v, $k) use (&$sums) { (array_sum($v) < 300) ?: ($sums[$k] = $v); });

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Hello !

    ça tient en deux lignes :
    Oui...mais alors quelles lignes !!!


    Je te remercie beaucoup. Et maintenant, histoire de me coucher moins crétin, je vais tenter de comprendre ce code.
    Bonne soirée.

  4. #4
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Euh...juste une chose : ce code, dès qu'on le met dans une fonction avec le tableau et la limite en paramètre, retourne $sums tout farfelu.
    Pourquoi ?

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par renaud26 Voir le message
    Euh...juste une chose : ce code, dès qu'on le met dans une fonction avec le tableau et la limite en paramètre, retourne $sums tout farfelu.
    Pourquoi ?
    C'est parce que je pense que tu as oublié de passer la limite dans le use().
    Voici un code qui fait ceci :
    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
    <?php
     
    $values = array(
       1238 => array(4 => 181, 189, 176, 152, 147, 132, 173, 168, 160 ),
       1242 => array(4 => 209, 244, 218, 242, 173, 204, 315, 198, 197 ),
       1241 => array(4 => 154, 217, 183, 204, 151, 170, 206, 196, 180),
       1240 => array(4 => 5, 9, 3, 7, 10, 8, 4, 9, 5)
    );
     
    function filterData(array $data, $limit, $return_sums = true)
    {
       $filtered = array();
       array_walk($data,
          function($v, $k) use (&$filtered, $limit, $return_sums)
          {
             if (($sum = array_sum($v)) >= $limit) {
                $filtered[$k] = ($return_sums) ? $sum : $v;
             }
          }
       );
       return $filtered;
    }
     
    print_r(filterData($values, 300));
     
    ?>

  6. #6
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour,

    En appliquant cette fonction à mon tableau, je vois que le nombre d'enregistrement retourné correspond à la somme mini passée en paramètre...mais il est vide. Les données ont été perdues.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function cree_tableau(){
    //boucle qui crée le tableau
     
    return filterData($tab, 300);
     
    }
     
    function recup_tableau(){
    $tab = cree_tableau();
    print_r($tab); //array est vide
    }
    Alors que si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function cree_tableau(){
    //boucle qui crée le tableau
     
    print_r(filterData($tab, 300));
     
    }
    C'est OK.
    Quel est ce sortilège ???

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/09/2008, 13h41
  2. Exercice sur le tri d'un tableau
    Par momo1367 dans le forum Pascal
    Réponses: 1
    Dernier message: 16/04/2008, 19h28
  3. Réponses: 2
    Dernier message: 06/09/2007, 15h08
  4. [Tableaux] Tri alphabétique sur des colonnes d'un tableau html
    Par arnaudperfect dans le forum Langage
    Réponses: 1
    Dernier message: 02/04/2007, 15h51
  5. [Tableaux] Help sur un tri de tableau...
    Par abou76 dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2006, 15h01

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