Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2011, 10h30   #1
Invité régulier
 
Inscription : février 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 31
Points : 6
Points : 6
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 :
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
timmy1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 11h47   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 663
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 663
Points : 5 388
Points : 5 388
Les fonctions sort ne fonctionnent que sur le premier niveau d'un tableau multi-dimensionnel : le code :
Code :
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 ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 13h45   #3
Invité régulier
 
Inscription : février 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 31
Points : 6
Points : 6
Oui des que j'ai remis de l'ordre, car à force de bidouiller j'ai plus du tout le code d'origine.
timmy1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 14h10   #4
Invité régulier
 
Inscription : février 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 31
Points : 6
Points : 6
Bon voila...

Je met la partie qui concerne le tableau;

Code :
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.
timmy1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 16h12   #5
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 663
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 663
Points : 5 388
Points : 5 388
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 :
1
2
3
4
5
$tabTrie = array();
foreach($tab_rd as $equ => $semaines) {
  krsort($semaines);
  $tabTrie[$equ] = $semaines;
}
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h58.


 
 
 
 
Partenaires

Hébergement Web