Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 17/10/2011, 09h05   #1
Membre du Club
 
Thibaut LEFEBVRE
Finance
Inscription : octobre 2009
Messages : 123
Détails du profil
Informations personnelles :
Nom : Thibaut LEFEBVRE
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Finance
Secteur : Finance

Informations forums :
Inscription : octobre 2009
Messages : 123
Points : 45
Points : 45
Par défaut tri sur un tableau

Bonjour à tous,

Je bloque actuellement pour trier un tableau. Voici à quoi il ressemble :

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
Array
(
    [1] => Array
        (
            [CLIENT] => INT01
            [NOM] =>  AAAAA
            [ptf_encours] => 2
            [nb_sinistres] => 0
            [contrats_annuels] => 0.5
            [montant_sinistres] => 0
            [prime] => 0
            [rejet] => 0
            [nb_crt_prlv] => 1
            [aff_nvl_resil] => 0
            [aff_nvl_total] => 1
            [frequence_sinistres] => 0
            [ratio_impayes] => 0
            [ratio_sp] => 0
            [qualite] => 0
            [duree_moy] => 91.25
            [style] => englobage1
        )
 
    [2] => Array
        (
            [CLIENT] => 002617
            [NOM] => BBBBB
            [ptf_encours] => 1
            [nb_sinistres] => 0
            [contrats_annuels] => 1
            [montant_sinistres] => 0
            [prime] => 0
            [rejet] => 0
            [nb_crt_prlv] => 0
            [aff_nvl_resil] => 0
            [aff_nvl_total] => 0
            [frequence_sinistres] => 0
            [ratio_impayes] => 0
            [ratio_sp] => 0
            [qualite] => 0
            [duree_moy] => 365
            [style] => englobage2
        )
 
    [3] => Array
        (
            [CLIENT] => 410001
            [NOM] => CCCCC
            [ptf_encours] => 3
            [nb_sinistres] => 0
            [contrats_annuels] => 2.01
            [montant_sinistres] => 0
            [prime] => 0
            [rejet] => 0
            [nb_crt_prlv] => 1
            [aff_nvl_resil] => 0
            [aff_nvl_total] => 0
            [frequence_sinistres] => 0
            [ratio_impayes] => 0
            [ratio_sp] => 0
            [qualite] => 0
            [duree_moy] => 244.55
            [style] => englobage1
        )
 
    [4] => Array
        (
            [CLIENT] => 410003
            [NOM] => DDDDD
            [ptf_encours] => 290
            [nb_sinistres] => 4
            [contrats_annuels] => 258.94
            [montant_sinistres] => 2870.98
            [prime] => 885.22
            [rejet] => 7
            [nb_crt_prlv] => 79
            [aff_nvl_resil] => 0
            [aff_nvl_total] => 73
            [frequence_sinistres] => 1.54
            [ratio_impayes] => 8.86
            [ratio_sp] => 324.32
            [qualite] => 0
            [duree_moy] => 325.91
            [style] => englobage_rouge
        )
.
.
.
    [460] => Array
        (
            [CLIENT] => 874541
            [NOM] => EEEEE
            [ptf_encours] => 290
            [nb_sinistres] => 4
            [contrats_annuels] => 258.94
            [montant_sinistres] => 2870.98
            [prime] => 885.22
            [rejet] => 7
            [nb_crt_prlv] => 79
            [aff_nvl_resil] => 0
            [aff_nvl_total] => 73
            [frequence_sinistres] => 1.54
            [ratio_impayes] => 8.86
            [ratio_sp] => 324.32
            [qualite] => 0
            [duree_moy] => 325.91
            [style] => englobage_rouge
        )
Actuellement, il est trié par [CLIENT]. Comment est-il possible de le trier par chacune des entrées ? par exemple pour le trier par [NOM] ?

J'ai bien regardé du coté des fonctions de tri ici : http://php.net/manual/fr/array.sorting.php

Ensuite je me suis dit qu'il fallait que je prenne la fonction array_multisort mais ensuite, je ne comprends pas trop comment la mettre en oeuvre...

Quelqu'un peut-il m'aider ?

D'avance merci,

Souri84
Souri84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 09h23   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 180
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 180
Points : 6 465
Points : 6 465
Par le plus grand des hasard, tu ne récupère pas ce tableau d'un base de données ?
MaitrePylos est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 09h33   #3
Membre du Club
 
Thibaut LEFEBVRE
Finance
Inscription : octobre 2009
Messages : 123
Détails du profil
Informations personnelles :
Nom : Thibaut LEFEBVRE
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Finance
Secteur : Finance

Informations forums :
Inscription : octobre 2009
Messages : 123
Points : 45
Points : 45
Bonjour,

Je récupère ce tableau via une dizaine de requêtes mais aussi de fichiers CSV que l'on m'envoie par e-mail... Effectivement les données sont issues d'une base oracle.

Le mieux serait de faire des ASC ?
Souri84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 09h54   #4
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 180
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 180
Points : 6 465
Points : 6 465
Tu pourrais faire une temple temporaire pour y insérer l'ensemble de tes données et effectivement faire un ORDER BY.
MaitrePylos est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 10h25   #5
Membre du Club
 
Thibaut LEFEBVRE
Finance
Inscription : octobre 2009
Messages : 123
Détails du profil
Informations personnelles :
Nom : Thibaut LEFEBVRE
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Finance
Secteur : Finance

Informations forums :
Inscription : octobre 2009
Messages : 123
Points : 45
Points : 45
une temple ?

Il n'y aurait pas moyen d'utiliser une des fonctions de php toute prête plutôt que de devoir modifier X requêtes ?

Merci pour tes réponses,

A+
Souri84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 10h33   #6
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 180
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 180
Points : 6 465
Points : 6 465
Table....

Je suis vachement fatigué.....pour moi c'est le plus simple.
MaitrePylos est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 13h15   #7
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 390
Points : 5 390
Personnellement, j'ai un faible pour usort (et éventuellement uasortet uksort)
Tu peux très simplement définir une fonction de comparaison de deux éléments de ton tableau et l'utiliser comme fonction de tri.
Exemple :
Code :
1
2
3
4
5
6
7
8
function sortParNom($a,$b) {
  if ($a['NOM'] == $b['NOM']) {
    return 0;
  }
  return ($a['NOM'] > $b['NOM']) ? -1 : 1;
}
 
usort($tableauATrier, 'sortParNom');
__________________
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 17/10/2011, 13h43   #8
Membre du Club
 
Thibaut LEFEBVRE
Finance
Inscription : octobre 2009
Messages : 123
Détails du profil
Informations personnelles :
Nom : Thibaut LEFEBVRE
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Finance
Secteur : Finance

Informations forums :
Inscription : octobre 2009
Messages : 123
Points : 45
Points : 45
Merci Celira et MaitrePylos pour vos réponses...

J'ai en fait utilisé asort() et arsort() comme dans la doc et ça marche ! je garde toute de même sous le coude ton petit bout de code Celira !

Grand merci à vous deux !

A+
Souri84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h26.


 
 
 
 
Partenaires

Hébergement Web