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] petit probleme de recursiviter


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut [Tableaux] petit probleme de recursiviter
    salut

    pour alleger mon travaille je map la structure de ma base dans un fichier xml
    (qui devrai etre compatible sdo)
    mais dans certain cas ma methode fonctionne et pas dans d'autre
    petit example( )
    le fichier xml
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    		<table>
    			<name>USERS</name>
    			<colums>id_users</colums>
    			<colums>firstname</colums>
    			<colums>lastname</colums>
    			<colums>login</colums>
    			<colums>password</colums>
    			<colums>email</colums>
    			<colums>comment</colums>
    			<colums>photo</colums>
    			<pk>id_users</pk>
    		</table>
    		<table>
    			<name>GROUPS</name>
    			<colums>id_groups</colums>
    			<colums>name</colums>
    			<pk>id_groups</pk>
    		</table>
    		<table>
    			<name>PERMISSION</name>
    			<colums>id_permission</colums>
    			<colums>permited</colums>
    			<colums>id_groups_users</colums>
    			<colums>id_module_actions</colums>
    			<pk>id_permission</pk>
    			<fk>
    				<from>MODULE_ACTIONS</from>
    				<to>id_module_actions</to>
    			</fk>
    			<fk>
    				<from>GROUPS_USERS</from>
    				<to>id_groups_users</to>
    			</fk>
    		</table>
    		<table>
    			<name>GROUPS_USERS</name>
    			<colums>id_groups_users</colums>	
    			<colums>id_groups</colums>	
    			<colums>id_users</colums>
    			<pk>id_groups_users</pk>
    			<fk>
    				<from>GROUPS</from>
    				<to>id_groups</to>
    			</fk>
    			<fk>
    				<from>USERS</from>
    				<to>id_users</to>
    			</fk>
    		</table>
    		<table>
    			<name>MODULE_ACTIONS</name>
    			<colums>id_module_actions</colums>	
    			<colums>id_module</colums>	
    			<colums>id_actions</colums>
    			<pk>id_module_action</pk>
    			<fk>
    				<from>MODULE</from>
    				<to>id_module</to>
    			</fk>
    			<fk>
    				<from>ACTIONS</from>
    				<to>id_actions</to>
    			</fk>
    		</table>
    		<table>
    			<name>MODULE</name>
    			<colums>id_module</colums>
    			<colums>name</colums>
    			<pk>id_module</pk>
    		</table>
    		<table>
    			<name>ACTIONS</name>
    			<colums>id_actions</colums>
    			<colums>name</colums>
    			<pk>id_actions</pk>
    		</table>
    associer a la methode suivante
    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
    	protected function getTable($table=null,&$array=null)
    	{
    		if(isset($this->_base[$this->_table]['fk']))
    		{
    			if(isset($this->_base[$this->_table]['fk']) && $table===null)
    			{
    				$table=$this->_base[$this->_table];
    				$array[0]=$this->_table;
    			}else
    			$table=$this->_base[$table];
    			if(isset($table['fk'])){
    				foreach ($table['fk'] as $fk)
    				{
    					$nb=count($array);
    					$array[$nb++]=(string)$fk->from;
    					$this->getTable((string)$fk->from,$array);
    				}
    			}
    			return $array;
    		}
    		else 
    		return array($this->_base[$this->_table]['name']);
    	}
    me retourne les nom de toute les tables avec PERMISSION en table d'entré (j'ai une autre methode pour les jointures)

    mais voila cette methode fonctionne que tres partiellement avec
    une autre partie de mon fichier xml

    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
    41
    <table>
    			<name>ARTICLE</name>
    			<colums>id_article</colums>
    			<colums>contenu</colums>
    			<colums>title</colums>
    			<colums>id_image</colums>
    			<colums>id_users</colums>
    			<colums>id_xslt</colums>
    			<colums>date</colums>
    			<colums>keyword</colums>
    			<pk>id_article</pk>
    			<fk>
    				<from>IMAGE</from>
    				<to>id_image</to>
    			</fk>
    			<fk>
    				<from>XSLT</from>
    				<to>id_xslt</to>
    			</fk>
    			<fk>
    				<from>USERS</from>
    				<to>id_users</to>
    			</fk>
    		</table>
    		<table>
    			<name>IMAGE</name>
    			<colums>id_image</colums>
    			<colums>name</colums>
    			<colums>description</colums>
    			<pk>id_image</pk>
    			<fk>
    				<from>THEME</from>
    				<to>id_theme</to>
    			</fk>
    		</table>
    		<table>
    			<name>THEME</name>
    			<colums>id_theme</colums>
    			<colums>name</colums>
    			<pk>id_theme</pk>
    		</table>
    ici je n'arrive pas a recuperer la table THEME

    c'est le foreach qui merde, mais j'ai pas trouver le bon paliatif
    merci à tous ceux qui ont lu le post jusqu'au bout

    ps: petite precsion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count($this->_base['ARTICLE']['fk'])
    donne 3
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count($this->_base['IMAGE']['fk'])
    donne 2

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    je pense avoir trouver l'un de mes problemes
    en fait je met dans un tableau les tables avec leurs specificitées
    voici le tableau
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
      [ARTICLE] => Array
            (
                [name] => ARTICLE
                [colums] => Array
                    (
                        [0] => id_article
                        [1] => contenu
                        [2] => title
                        [3] => id_image
                        [4] => id_users
                        [5] => id_xslt
                        [6] => date
                        [7] => keyword
                    )
                [pk] => id_article
                [fk] => Array
                    (
                        [0] => SimpleXMLElement Object
                            (
                                [from] => IMAGE
                                [to] => id_image
                            )
                        [1] => SimpleXMLElement Object
                            (
                                [from] => XSLT
                                [to] => id_xslt
                            )
                        [2] => SimpleXMLElement Object
                            (
                                [from] => USERS
                                [to] => id_users
                            )
                    )
            )
     
        [IMAGE] => Array
            (
                [name] => IMAGE
                [colums] => Array
                    (
                        [0] => id_image
                        [1] => name
                        [2] => description
                    )
                [pk] => id_image
                [fk] => SimpleXMLElement Object
                    (
                        [from] => THEME
                        [to] => id_theme
                    )
            )
    donc il faut que je detecte la diffrence entre ces 2 cas?
    mais comment? un is_array mais ou

  3. #3
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        [IMAGE] => Array
            (
                ...
                [fk] => Array
                    (
                        [0] => SimpleXMLElement Object
                            (
                                [from] => THEME
                                [to] => id_theme
                            )
                    )
            )

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Par défaut
    Bin la moi je ne vois pas trop bien non plus pourquoi c'est comme ça, mais tout ce que je peux te dire c'est que si tu n'arrives pas du tout à faire ce que tu veux et que t'es obligé dy arriver, tu peux passer par XSLT qui est fait pour, je pense que ca te facilitera la vie.

    Bon Courage.

    Zep3k!GnO

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Bon, désolé, je n'ai pas tout lu...
    Cependant, j'ai juste une question d'algo : pourquoi fais-tu le même test deux fois l'une dans l'autre ? Le test interne me semble inutile, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isset($this->_base[$this->_table]['fk'])

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    oui d'accord Mr.N mais comment et detecter la difference
    la je vois pas trop

    sinon Zep3k!GnO je connais pas bien XSLT si tu pouvai expliciter car j'ai deja un fichier xml qui me convient c'est plutot la difference d'interpretation de simpleXml qui me gene

    Kirkis; tout a fais d'accord c'est en fait que le premier test a été rajouter
    c'est pour ca

  7. #7
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par jeff_!
    oui d'accord Mr.N mais comment et detecter la difference
    la je vois pas trop
    Quel différence ? Entre quoi et quoi ? Qu'est ce que ça t'apporte ? Je comprend pas trop ce que tu veux faire. Ce que je t'ai proposé en tout cas c'est d'avoir un tableau de 1 élément si tu as un seul fk...

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    out cas c'est d'avoir un tableau de 1 élément si tu as un seul fk.
    je suis d'accord, mias je vois pas comment detecter si j'ai un seul fk

  9. #9
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Je crois que je commence à comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
             if(isset($table['fk'])){
                foreach ($table['fk'] as $fk)
                {
                   $nb=count($array);
                   $array[$nb++]=(string)$fk->from;
                   $this->getTable((string)$fk->from,$array);
                }
             }
    à remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(isset($table['fk'])){
       if (!is_array($table['fk'])) {
          $table['fk'] = array($table['fk']);
       }
       foreach ($table['fk'] as $fk)
       {
          $nb=count($array);
          $array[$nb++]=(string)$fk->from;
          $this->getTable((string)$fk->from,$array);
       }
    }

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    yes
    j'ai plus cas faire la meme chose pour mon autre methode
    comme quoi il y a une difference entre connaitre un langage et etre capable de developper
    6/8

    merci

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Par défaut
    Pour le xslt, c'est pas bien dur ,c'est en fait une feuille de style que t'appliques a ton document xml.
    Voilà un p'ti lien sur XSl c'est poas facile a trouver sur le net un site qui ne parle correctement, tu vas voir c'est pas mal expliqué :
    http://www.becoz.org/these/docbook/html/ar01s03.html

    Et puis si t'as des soucis, hésite pas à m'le poster sur le forum ou en message privé..

    Bon Courage.

    Zep3k!GnO

    P.S:tu vas voir Xsl pour le xml ca change la vie c'est mortel !

  12. #12
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Tout dépend de l'usage. le T c'est pour la transformation, et j'ai pas l'impression que Jeff veut transformer son arbre... Par contre xpath pour se balader dedans oui.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    l'arbre tel qu'il est fait me convient je me balade avec simple xml
    je retrancris l'arbre en tableau

    dans mon xsl n'est d'aucun secours

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 66
    Par défaut
    dans mon xsl n'est d'aucun secours
    Arf tanpis, désolé alors

    ++
    Zep3k!GNO

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

Discussions similaires

  1. Petit problème de fork
    Par osmose22 dans le forum Linux
    Réponses: 7
    Dernier message: 18/03/2007, 21h10
  2. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  3. petit probleme de requete
    Par nico33307 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/08/2004, 11h36
  4. [FLASH MX 2004]-probleme de recursivité.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 10/05/2004, 19h48
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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