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 :

[Tableaux] Trier un tableau d'objets


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut [Tableaux] Trier un tableau d'objets
    Bonjour,

    J'ai cherché dans la doc et le forum, je n'ai pas trouvé la solution à mon problème :

    je dispose d'un tableau de points dont voici la classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    class point
    {
    		public $restriction;
    		public $angle;
    		public $valeur;
    		public function __construct($r,$a)
    		{
    			$this->restriction = $r;
    			$this->angle = $a;
    		}
    }
    ?>
    Je souhaiterais trier mon tableau mais il s'agit d'un tri assez particulier : j'ai une serie d'angles (de 0 à 360 par pas de 5 avec possibilité de doublon i.e je peux avoir deux points ayant un angle de 80 mais qui auront une restriction potentiellement differente)

    Je souhaiterais obtenir au final l'equivalent d'un order by angle,restriction

    Existe t il des fonctions de tri avancées que j'aurais loupées ?

    merci.

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Bonjour !

    JE pense qu'il faut tu utilises usort() qui permet de définir tes critères de tris pour trier un tableau!
    Ca va te faire écrire une fonction qui va prendre deux points en paramètre (puisque c'est deux éléments du tableau) et qui dire lequel est considéré comme le plus grand (selon tes critères). Et ensuite la fonction qui trie ces éléments se basera sur cette fonction de comparaison pour réaliser un tri.

    J'espere avoir été clair

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Exemple qui utilise la fonction http://php.net/usort :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    class point
    {
    		public $restriction;
    		public $angle;
    		public $valeur;
    		public function __construct($r,$a)
    		{
    			$this->restriction = $r;
    			$this->angle = $a;
    		}
     
        public static function sort($p1, $p2)
        {
            if ($p1->angle == $p2->angle) {
                return ($p1->restriction == $p2->restriction ? 0 : ($p1->restriction > $p2->restriction ? 1 : -1));
            } else {
                return ($p1->angle > $p2->angle ? 1 : -1);
            }
        }
    }
     
    $points = array(
        new point(0, 0),
        new point(1, 1),
        new point(2, 1),
        new point(1, 3),
        new point(4, 5),
        new point(2, 3),
        new point(3, 2),
        new point(4, 4),
        new point(0, 0)
    );
     
    usort($points, array('point', 'sort'));
    header('Content-type: text/plain');
    foreach ($points as $p) {
        printf ('(%d %d)' . PHP_EOL, $p->angle, $p->restriction);
    }
    ?>
    Résultat obtenu :
    (0 0)
    (0 0)
    (1 1)
    (1 2)
    (2 3)
    (3 1)
    (3 2)
    (4 4)
    (5 4)
    Etait-ce ce que vous vouliez ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    merci, c'est à peu près ça, je vais devoir coder un truc de la mort ^^ (les restrictions ne sont pas triées dans votre proposition)

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Corrigé, c'était une erreur d'opérateur (== au lieu de > sur la deuxième ternaire).

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

Discussions similaires

  1. [Tableaux] Trier un tableau d'objet
    Par boux2 dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2007, 09h12
  2. [Tableaux] trier un tableau associatif
    Par cijez dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2006, 16h07
  3. Réponses: 5
    Dernier message: 13/06/2006, 11h08
  4. [Tableaux] Trier un tableau [array]
    Par clemsouz dans le forum Langage
    Réponses: 2
    Dernier message: 15/05/2006, 13h33
  5. [Tableaux] Trier un tableau comme avec ORDER BY DESC
    Par Anduriel dans le forum Langage
    Réponses: 28
    Dernier message: 08/12/2005, 18h50

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