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 :

Trier une collection d'objets en fonction de leurs propriétés


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Points : 101
    Points
    101
    Par défaut Trier une collection d'objets en fonction de leurs propriétés
    Salut tout le monde...

    j'utilise PDO et je reçois des tableaux d'objets en réponse des requetes que je fais à ma bdd...
    bon c'est super. Mais une fois que j'ai ces tableaux je souhaiterai pouvoir effectuer un tri dedans.
    Par exemple, une fonction qui me renverrai tous les objets dont la propriété "toto" est égale à 10 parmis mon tableau d'objets.

    Vous connaissez un moyen simple de faire une telle fonction en php ?

    à savoir que mes objets peuvent conteir des objets...

    par exemple mon objet MEUBLE peut contenir plusieurs objets PIEDS

    j'aimerai donc pouvoir dire à ma fonction quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $return = fonctioncherche ($tableau_dobjets, 'meuble.pieds.couleur', 'rouge')
    et ceci renverait tous les meubles dont un pied est rouge ...
    Bref, pas si simple de réinventer mysql pour les objets

    thanks
    ++

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Points : 101
    Points
    101
    Par défaut
    yep...
    bon j'ai fait un truc du genre ça

    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
     
    function search_object ($arr, $prop, $val) {
     
    		foreach($arr as $obj) {
     
    			$tmpprop = $obj->$prop;
    			trace ($tmpprop);
     
    			if ($tmpprop == $val) {
    				$return[] = $obj;
    			}
    		}	
     
    		return $return;
     
    	}
    mais ça permet de ne chercher que dans une seule propriété à la fois ... du coup ça n'est pas très optimisé ... mais c'est déjà un début ...

    ++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Hello,

    Si tu utilises une base de données, pourquoi ne pas mettre ton filtre dans ta requête, la clause WHERE quoi ?

    Si c'est vraiment impossible, tu as toujours recours à array_filter qui est fait pour ça. Un exemple avec une fonction lambda qui retourne les nombres pairs d'un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $monTableau = range(1, 30);
    $monTableauFiltre = array_filter($monTableau, function($elem){return $elem % 2 == 0; });
    print_r($monTableau);
    Quelque soit le type de données que contient ton tableau, il suffit d'adapter la fonction de filtre.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Sur la base de ta fonction, en utilisant pour la recherche un tableau [nom_priopriete] => [valeur] :
    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
    /**
     * @param $arr : tableau des objets à parcourir
     * @param $recherche : tableau des éléments recherchés [propriete => valeur]
     */
    function search_object ($arr, $recherche) {
        foreach($arr as $obj) {
            $ok = true;
            foreach ($recherche as $prop => $val) {
                $tmpprop = $obj->$prop;
                trace ($tmpprop);
                // si une des propriétés ne convient pas on s'arrête
                if ($tmpprop != $val) {
                    $ok = false;
                    break;
                }
            }
            if ($ok) {
                $return[] = $obj;
            }
        }    
        return $return;
    }
    Mais c'est pas forcément très optimisé non plus...

    EDIT : ah ben, tiens je viens de découvrir la fonction array_filter. Chouette fonction

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/05/2009, 15h59
  2. Réponses: 5
    Dernier message: 22/02/2009, 18h44
  3. [Struts] <logic:iterate> sur une collection d objets c
    Par trax020 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/05/2005, 00h11
  4. [VB6]Valeurs une collection renvoyée par la fonction d'une classe
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 30/03/2004, 11h04
  5. [VB6] Sauvegarder une collection d'objets
    Par Sayagh dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/09/2003, 11h58

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