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 14/09/2011, 15h59   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut usort sur un tableau coriace

Bonjour à tous,

Voici un tableau exemple (très simplifié) :

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
 
Array
(
    [630290] => Array
	(
		[PR] => Array
		(
			[0] => Mr
			[1] => Dupond
			[2] => Claude
			[3] => 145 B BOULEVARD LA FAYETTE
			[4] => 63000
			[5] => CLERMONT FERRAND
			[6] => 22
 
		)
 
	 )
 
    [630510] => Array
	(
		[PR] => Array
		(
			[0] => Mme
			[1] => Durand
			[2] => Georgette
			[3] => 9 RUE DU CHAT
			[4] => 63000
			[5] => CLERMONT FERRAND
			[6] => 35
		)
 
	)
 
    [631130] => Array
	(
		[PR] => Array
		(
			[0] => Melle
			[1] => Martin
			[2] => Emma
			[3] => 1 RUE MAURICE BUSSET
			[4] => 63000
			[5] => CLERMONT FERRAND
			[6] => 17
		)
 
    )
 
)
Je cherche à le trier par la clé [6].
J'ai essayé avec usort et un (plein de) callback
Rien à faire.
Si vous avez une idée, je veux bien !
D'avance merci.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 16h24   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
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 661
Points : 5 388
Points : 5 388
Quelque chose comme ça ?
Code :
1
2
3
4
5
6
7
8
9
function sortCoriace($t1, $t2) {
    $a = $t1['PR'][6];
    $b = $t2['PR'][6];
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
usort($tab, 'sortCoriace');
en supposant que ta colonne 6 soit un nombre et que le premier niveau ne contiennent qu'un seul tableau...
__________________
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 14/09/2011, 16h39   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour et merci de ta réponse.
Ca ne fonctionne pas vraiment comme je le voudrais mais c'est une piste.

- La colonne 6 est bien un nombre...mais à vrai dire, un nombre décimal dont la longueur de la partie décimale peut varier (ce sont des coordonnées).

Donc on peut avoir 3.22, 3.562, 3.7854, 4.12...etc...

Et j'ai bien l'impression que ça fiche le tri en l'air.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 10h28   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
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 661
Points : 5 388
Points : 5 388
Le problème, c'est est-ce que ton nombre est vraiment un nombre ou est-ce que c'est une chaine qui contient un nombre ? Ajouter une conversion avec float_val pourrait être une bonne idée.
Code :
1
2
3
4
5
6
7
8
function sortCoriace($t1, $t2) {
    $a = float_val($t1['PR'][6]);
    $b = float_val($t2['PR'][6]);
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
__________________
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 15/09/2011, 10h51   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Oui, c'est beaucoup mieux comme ça.
Je te remercie beaucoup et te souhaite une bonne journée.
renaud26 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 01h52.


 
 
 
 
Partenaires

Hébergement Web