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 :

Problème de tri sur tableau associatif multidimentionnel


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 57
    Points : 34
    Points
    34
    Par défaut Problème de tri sur tableau associatif multidimentionnel
    Bonjour à tous,

    Un petit soucis sur la mise en ordre d'un tableau que je n'arrive pas à solutionner.
    Voila je récupère mes données que je mets dans un tableau sous cette forme.

    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
    Array
    (
    [nom prénom] => Array
            (
                [2011_39] => Array
                    (
                        [nb_sav] => 2
                        [nb_rd] => 0
                        [taux] => 0.00
                    )
     
                [2011_40] => Array
                    (
                        [nb_sav] => 6
                        [nb_rd] => 0
                        [taux] => 0.00
                    )
     
                [2011_41] => Array
                    (
                        [nb_sav] => 3
                        [nb_rd] => 0
                        [taux] => 0.00
                    )
     
                [2011_43] => Array
                    (
                        [nb_sav] => 2
                        [nb_rd] => 0
                        [taux] => 0.00
                    )
     
                [2011_44] => Array
                    (
                        [nb_sav] => 3
                        [nb_rd] => 0
                        [taux] => 0.00
                    )
     
                [2011_42] => Array
                    (
                        [nb_sav] =>  
                        [nb_rd] =>  
                        [taux] =>  
                    )
     
            )
    c'est-à-dire les noms prénoms de la personne puis année_semaine et 3 données.

    Mais il arrive que pour une personne il n'y ait pas de donnée une semaine et lorsque je transfère à smaaty il me décalle les données dans l'affichage.

    Je parcours donc mon tableau et si l'indice n'existe pas je le créee avec un caractère vide.

    Il me le rajoute donc à la fin de du sous tableau de la personne concernée(voir ci-dessus la 2001-42).

    Et la quelque soit la fonction de trie utilisée pour remettre en ordre cela ne change rien (krsort).

    J'ai bien pensé à reconstituer mon tableau en le copiant dans un autre au fur et à mesure que je contrôle, mais je voudrais bien comprendre pourquoi les tris ne marche pas.

    Merci pour vos conseils

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Les fonctions sort ne fonctionnent que sur le premier niveau d'un tableau multi-dimensionnel : le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab = array('first' => array('2011_40' => 'toto', '2011_42' => 'tata', '2011_43' => 'titi' , '2011_41' => 'tutu'));
    krsort($tab);
    me renvoie :
    Array (
        [first] => Array (
                [2011_40] => toto
                [2011_42] => tata
                [2011_43] => titi
                [2011_41] => tutu
            )
    
    )
    On peut voir ton code ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Oui des que j'ai remis de l'ordre, car à force de bidouiller j'ai plus du tout le code d'origine.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bon voila...

    Je met la partie qui concerne le tableau;

    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
     
    foreach($rd as $key=>$val)
    {$sem=$val['synthese_rd_semaine'];
    $equ=$val['synthese_rd_equipe'];
    $nb_sav=$val['sav'];
    $nb_rd=$val['rd'];
    $taux=$val['taux'];
    $tab_rd[$equ][$sem]['nb_sav']=$nb_sav;
    $tab_rd[$equ][$sem]['nb_rd']=$nb_rd;
    $tab_rd[$equ][$sem]['taux']=$taux;
    }
    //test existence dans tableau
    foreach($service as $key=>$val)
    {
      $equ=$val['synthese_rd_equipe'];
      foreach($semaine_periode as $key1=>$val1)
      {
      $sem=$val1['synthese_rd_semaine'];
      if(!isset($tab_rd[$equ][$sem]))
      {  
      $tab_rd[$equ][$sem]['nb_sav']=" ";
      $tab_rd[$equ][$sem]['nb_rd']=" ";
      $tab_rd[$equ][$sem]['taux']=" ";}
      }
    }
    ksort($tab_rd);
    Donc je met les résultats d'une requête $rd dans mon tableau.

    Puis je le liste en fonction des résultats de 2 autres requêtes $services (qui me renvoie les noms clef 1) et $semaine_periode (qui me donne les semaines clef 2)
    Je fais un test pour savoir si la valeur existe (j'ai pris isset comme de toute fçon j'ai pas de valeu nul ça fonctionne aussi bien que array_key_exists ) et si n'existe pas je crée avec un caractère vide.
    Puis je relance un trie du tableau qui ne se fait pas.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Comme je l'ai dit, les fonctions sort ne trient que le 1er niveau. Or ce que tu veux faire est un tri du 2e niveau. Donc forcément ça ne fonctionne pas.

    Le plus simple serait sans doute de passer par une copie du tableau, en bouclant et en re-triant au fur et à mesure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $tabTrie = array();
    foreach($tab_rd as $equ => $semaines) {
      krsort($semaines);
      $tabTrie[$equ] = $semaines;
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/09/2006, 15h55
  2. Réponses: 9
    Dernier message: 11/08/2006, 21h58
  3. [VB.NET] Problème de tri sur Datagrid/gridview multilingue
    Par crimsonPhantom dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/03/2006, 22h41
  4. Tri sur tableau à 2 dimensions
    Par Poussy-Puce dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/03/2006, 19h36
  5. loop sur tableau associatif
    Par Plawi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/02/2005, 11h29

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