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 :

Tri spécifique sur un tableau [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 120
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !!

  2. #2
    Membre expérimenté Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Par défaut
    Deux ptites questions :
    1. Ton service retourne quoi comme valeurs mis à part le titre ?
      Teste avec :
      Code php : Sélectionner tout - Visualiser dans une fenêtre à part
      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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 120
    Par défaut
    Il retourne d'autres éléments.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
     
    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.

  4. #4
    Membre expérimenté Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Par défaut
    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 : 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
     
    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;
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 120
    Par défaut
    Merci pour l'aide apportée !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri rapide sur un tableau d'entiers
    Par eldoir dans le forum Shell et commandes GNU
    Réponses: 46
    Dernier message: 03/07/2015, 13h02
  2. Tri spécial sur un tableau
    Par laura_ dans le forum Langage
    Réponses: 8
    Dernier message: 16/01/2013, 17h50
  3. Tri spécifique sur colonne
    Par nddvlp dans le forum Composants
    Réponses: 1
    Dernier message: 15/02/2012, 15h19
  4. [Tableaux] tri sur un tableau multi-dimensionnel
    Par nicoaix dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2006, 22h23
  5. Réponses: 2
    Dernier message: 08/04/2004, 17h30

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