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

Design Patterns Discussion :

[PHP]Arbre d'objet et recherche d'objets


Sujet :

Design Patterns

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut [PHP]Arbre d'objet et recherche d'objets
    Bonjour,

    Cela fait trois jour que j'essaye de trouver un moyen d'effectuer une recherche dans un arbre d'objet.*
    Je fais ceci en PHP et dans ma base, mes objets ce présente comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `ELEMENT` (
      `ID` varchar(255) collate latin1_general_ci NOT NULL,
      `NOM` varchar(255) collate latin1_general_ci default NULL,
      `DECLINAISON` varchar(255) collate latin1_general_ci default NULL,
      `DESCRIPTION` text collate latin1_general_ci,
      PRIMARY KEY  (`ID`)
    );
    Un Objet ayant un nom et une liste d'enfant de même type
    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
    class Element {
    	private $_dao; // objet 
    	public $_id; // string
    	public $_nom; // string
    	public $_parent; // objet element
    	public $_declinaison; // id de l'objet parent
    	public $_description; 
    	public $_enfant; 
    
    	public function __construct($donnees = null, $parent = null,$filtre=null) {
    		// si $donnees (reponse SQL), je récupère les élément id, nom, declinaison et description
    		// si $parent, je récupère parent
    		// avec $_dao, je recherche les enfants avec getElements($this, $filtre)
    	}
    	...
    Lorsque je fais une recherche filtrée (sur le nom de type nom = %filtre%), je fais une recherche en spécifiant les éléments racines, leur fils et leur petit fils. Pour pouvoir remonter un élément qui peut ne pas correspondre mais qui peut avoir un fils (ou petit fils) correspondant et ne remontant que les éléments respectant ce critère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Dao{
    	public function getElements($parent = null,$filtre=null) {
    		// je fais une recherche sur la table Element
    		// si j'ai un filtre je fais une jointure pour avoir les fils et les petit fils
    		// si j'ai un parent, je cherche les filles (declinaison = id du parent)
    		// si j'ai un filtre je recherche un element fils ayant un nom qui correspond au filtre (ou un de ces fils ou de ces petit fils 
    		// je retourne la liste 
    	}
    Bon, j'espère que mes explications ne sont pas trop confuse. Pour faire simple, j'essaye de filtré un arbre d’éléments en affichant uniquement les éléments correspondant au filtre et les parents de ceux-là. Tous ca en PHP.

    Je n'arrive pas à voir comment je peux faire sans spécifier le niveau de recherche (ajouter des jointures pour les enfants et petit enfants). Comment je fais si j'ai des petit-petit fils ? Et lorsqu'un élément correspond aux critères, afficher tous ses fils et petits fils.

    Est-ce que vous connaissez un paterne applicable en PHP ?

    J'espère juste que je poste au bonne endroit.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : juillet 2006
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Bon hier soir, alors que je donnais le bain à ma fille, j'ai trouvé une solution qui me semble viable (vis à vis de ce que j'ai déjà fait).

    Dao->getElements($parent = null,$filtre=null):
    • si j'ai pas de parent définit, je récupère tout les éléments ayant une déclinaison ou pas
    • en suite, pour chaque donnée création d'un Objet Element mis dans un map (avec l'ID comme clé) et dans une liste retour si ce dernier est racine (n'a pas de déclinaison) ou dans une liste à traiter (si déclinaison)
    • Pour chaque éléments de la liste à traiter, je cherche dans la map le parent et j'associe l'enfant au parent (parent .addEnfant(enfant) et enfant.addParent(parent)) :
      • Si je ne trouve pas le parent dans la map, je fais une recherche en base, je l'ajout à la map et aussi en fin de liste à traiter (si il à un parent) ou à la liste retour.
    • Puis je retour la liste retour

    Element($donnees = null) :
    • Création de l'élément sans recherche le parent, ni les enfants
    • La liste des enfants possède trois état:
      • inexistante : aucune recherche n'a été faite, dans mon getEnfant(), si elle n'existe pas, je cherche les enfants en base
      • liste vide : la recherche à été faite, il n'y a pas d'enfant.
      • liste non vide : idem mais présence d'enfant.


    Voila, je pense que j'ai un truc convenable ... fallait juste qu'y réfléchisse une journée de plus.

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

Discussions similaires

  1. [Recherche] Info objet COM
    Par kacedda dans le forum Visual C++
    Réponses: 4
    Dernier message: 29/08/2006, 15h25
  2. Recherche librairies objet access
    Par thb74 dans le forum Access
    Réponses: 1
    Dernier message: 10/08/2006, 21h49
  3. [DOM] Objet RegExp recherche de pattern
    Par Loki13 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/08/2006, 18h50
  4. [C#][Remoting]scan de la mémoire d'un process en recherche d'objet
    Par hatake.kakashi dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/07/2006, 11h35
  5. [Débutant][ArrayList]parcours et recherche d'objets
    Par codexomega dans le forum java.util
    Réponses: 8
    Dernier message: 19/02/2006, 19h14

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