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 05/10/2011, 15h06   #1
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 77
Points : 26
Points : 26
Par défaut Tri spécifique sur un tableau

Bonjour à tous,

Je suis actuellement en train de me battre sur un tri de tableau qui me pose quelques soucis...

Voici la structure du tableau en questions :
Code :
1
2
3
4
5
6
7
 
$array['categories']['Prix']['items'][0]['title'] = 'Moins de 5 euros';
$array['categories']['Prix']['items'][1]['title'] = 'De 5 à 10 euros';
$array['categories']['Prix']['items'][2]['title'] = 'De 15 à 20 euros';
$array['categories']['Prix']['items'][3]['title'] = 'Plus de 20 euros';
$array['categories']['Prix']['items'][4]['title'] = 'Gratuit';
$array['categories']['Prix']['items'][5]['title'] = 'De 10 à 15 euros';
Ce tableau est alimenté par un webservice sur lequel je n'ai aucun pouvoir. Ce webservice retourne les données dans l'ordre où elles arrivent. Donc il se peut que le tableau soit bien trié et des fois, non.

Je voudrais savoir comment faire pour trier ce tableau par le titre (par intervalles de prix asc) de sortes à avoir ceci :

Code :
1
2
3
4
5
6
7
 
$array['categories']['Prix']['items'][0]['title'] = 'Gratuit';
$array['categories']['Prix']['items'][1]['title'] = 'Moins de 5 euros';
$array['categories']['Prix']['items'][2]['title'] = 'De 5 à 10 euros';
$array['categories']['Prix']['items'][3]['title'] = 'De 15 à 20 euros';
$array['categories']['Prix']['items'][4]['title'] = 'De 10 à 15 euros';
$array['categories']['Prix']['items'][5]['title'] = 'Plus de 20 euros';
Je vous remercie par avance pour votre aide !!
zouberi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 17h03   #2
Membre confirmé
 
Avatar de Korri
 
Homme Hugo Vacher
Étudiant
Inscription : mai 2008
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Hugo Vacher
Âge : 23
Localisation : Canada

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2008
Messages : 158
Points : 224
Points : 224
Deux ptites questions :
  1. Ton service retourne quoi comme valeurs mis à part le titre ?
    Teste avec :
    Code php :
    print_r($array['categories']['Prix']['items'][0]);
  2. Ton services retourne toujours ces valeurs la, ou elles peuvent varier ?

Dans le premier cas, je pense que tu doit avoir une valeur numérique associée à chaque titre, alors un tris a base de uasort devrais suffire.

Dans le deuxième cas, tu peut associer à chaque titre une valeur dans un tableau, puis faire un tris uasort aussi.

Si aucune des deux solutions ne correspond, on regardera pour faire ça avec une regexp.
__________________
  • Quand la discutions est terminée, cliquez sur , Pensez y !
  • Vous voyez un message pertinent et de qualité ? Votez pour ce message !
Korri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 17h14   #3
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 77
Points : 26
Points : 26
Il retourne d'autres éléments.

Code :
1
2
3
4
5
6
7
 
[title] => De 8 et 15 eur
[count] => 0
[state] => 0
[price] => 12.00
[discount] => 5.00
[price_origin] => 12.60
Par contre, je sais que le champs "title" ne changera pas des différents possibilités citées auparavant.

Actuellement, j'ai mis ceci en place. Attention, c'est très moche, mais au moins ça a le mérite de marcher

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
 
function sortArray($array) {
    $result = array();
 
    foreach($array as $key => $val) {
    	switch($val['title']) {
    		case "De 8 et 15 eur" :
    			$result[2] = $val;
    		break;
 
    		case "Gratuit" :
    			$result[0] = $val;
    		break;
 
    		case "Plus de 25 eur" :
    			$result[4] = $val;
    		break;
 
    		case "De 15 à 25 eur" :
    			$result[3] = $val;
    		break;
 
    		case "Moins de 8 eur" :
    			$result[1] = $val;    			
    		break;
    	}
    }
 
    ksort($result);    
    return $result;
}
Merci en tous cas pour tes conseils.
zouberi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 18h43   #4
Membre confirmé
 
Avatar de Korri
 
Homme Hugo Vacher
Étudiant
Inscription : mai 2008
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Hugo Vacher
Âge : 23
Localisation : Canada

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2008
Messages : 158
Points : 224
Points : 224
Dans ton cas c'est quelque chose de pas bien plus propre que je t'aurais proposé.

tu peut peut-être faire quelque chose de (un peut) plus propre comme ça :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
function sortArray($array) {
    $result = array();
	$pos = array(
		"Gratuit" => 0,
		"Moins de 8 eur" => 1,
		"De 8 et 15 eur" => 2,
		"De 15 à 25 eur" => 3,
		"Plus de 25 eur" => 4
	);
 
    foreach($array as $key => $val) {
		if(isset($pos[$val['title']])) {
			$result[$pos[$val['title']]] = $val;
		}
    }
 
    ksort($result);    
    return $result;
}
__________________
  • Quand la discutions est terminée, cliquez sur , Pensez y !
  • Vous voyez un message pertinent et de qualité ? Votez pour ce message !
Korri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 09h22   #5
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 77
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 77
Points : 26
Points : 26
Merci pour l'aide apportée !!!
zouberi 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 21h12.


 
 
 
 
Partenaires

Hébergement Web