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 :

Tableau bidimensionnel


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut Tableau bidimensionnel
    Bonjour à vous !

    Je ne suis pas un expert de programmation et j'ai donc besoin de vos lumières.
    Actuellement, j'essaye de faire du parsing d'xml.
    J'ai donc trouvé, corrigé et adapté une fonction qui va me servir à effectuer des actions en fonction des balises. Voici la fonction :

    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
        public function parseXML($xml, $niveau = 0, $numref = 0) {
            // Pour chaque item, on récupere la balise(nom) et l'objet SimpleXML de la balise
            foreach($xml as $balise[$niveau]=>$node) { // On vérifie qu'il y a un noeud enfant
     
                $this->balise[$niveau] = $balise[$niveau];
     
                $this->EcrireTXT("<br />".$niveau." Balise ".$this->balise[$niveau]);
                $enfants[$niveau] = $node->children(); // On récupere les enfants 
                $attributs[$niveau] = $node->attributes(); // On récupère les attributs
                if(trim($attributs[$niveau]) != "") { // S'il y en a
                    foreach($attributs[$niveau] as $parametre[$niveau]=>$valeur[$niveau]) {
                        //$this->EcrireTXT("<br/>Référence des parametres et de leurs valeurs : ".$numref."<br />");
                        $this->parametre[$niveau][$numref] = $parametre[$niveau][$numref];
                        $this->valeur[$niveau][$numref] = $valeur[$niveau][$numref];
                        $this->EcrireTXT(" >> ".$this->parametre[$niveau][$numref]." = <em>'".$valeur[$niveau][$numref]."'</em>");
                        $numref += 1;
                    }
                }
                if(trim($node) !== "") { //Si la balise contient une valeur
                    $this->EcrireTXT(" contient la valeur <em>'".$node."'</em> ");
                }
                $this->parseXML($enfants[$niveau], $niveau + 1, $numref = 0); // comme on a un enfant, on réappelle la fonction ) niveau +1
            }
        }
    Mais pour une raison que j'ignore j'ai 2 problèmes :

    1) si je comprends bien, parfois $numref passe une itération à une valeur de +1 par rapport à ce que la case du tableau peut contenir, c'est bien cela ? (Cas ou il n'y a pas + d'un seul paramètre/valeur)
    Est-ce pour ça que j'ai l'erreur suivante ?

    Cannot add element to-ports number 1 when only 0 such elements exists.
    Plusieurs fois, avant de conclure sur :
    Uninitalized string offset: 1
    2) Il me tronque ce qu'il y a dans le tableau : Exemple :

    <msg t='sys'><body action='apiOK' r='0'></body></msg>
    Devrai retourner pour
    $this->parametre[1][0] : la valeur 'action' et
    $this->parametre[1][1] : la valeur 'r'
    Sauf qu'il me retourne :
    $this->parametre[1][0] : la valeur 'a'
    $this->parametre[1][1] : la valeur '' (rien du tout...)
    A noter que ça ne bug que pour $this->parametre[$niveau][$numref].

    Pouvez vous m'éclairer s'il vous plait ? Merci d'avance !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Bonjour, ce post n'a pas l'air de trouver de réponse, est-ce bien la bonne section ?
    Est-il possible de le déplacer sinon ?

    Merci

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    qu'est ce que tu as en enter ? et qu'est ce que tu veux en sortie ?

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    En entrée, j'ai un une ligne de fichier xml commençant par <msg> et finissant par </msg>

    En sortie, je veux récupérer tous les éléments constituant le xml.

    les balises, leurs valeurs.
    les paramètres, leurs valeurs.

    pareil pour les éléments enfants, etc...

    Et pouvoir faire du traitement, en fonction des balises, de leur valeur, des paramètres, la même chose pour les éléments enfants, etc...

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <msg t='sys'><body action='apiOK' r='0'></body></msg>
    Je veux récupérer le contenu de la ligne tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    balise[0][0] = msg
    Parametre[0][0] = t
    Valeur[0][0] = 0
    La valeur du 1er tableau passe à 1 car je passe sur le premier élément enfant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    balise[1][0] = body
    Parametre[1][0] = action
    Valeur[1][0] = apiOK
    Imaginons maintenant x ou x correspond au nombre d'un même élément du même niveau enfant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Parametre[1][1] = r
    Valeur[1][1] = 0
    De sorte que si j'avais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <msg t='sys'><body action='apiOK' r='0' autreparam='booh' niark='haha'></body></msg>
    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Parametre[1][2] = autreparam
    Valeur[1][2] = booh
     
    Parametre[1][3] = niark
    Valeur[1][3] = haha

  5. #5
    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
    Tu as pensé à regarder du côté de choses existantes comme SimpleXML ?

Discussions similaires

  1. Tableau bidimensionnel de Vector
    Par j0o0 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/05/2007, 20h51
  2. Affichage tableau bidimensionnel
    Par LhIaScZkTer dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 22/11/2006, 17h17
  3. pb tableau bidimensionnel en dynamique
    Par silencer dans le forum C
    Réponses: 4
    Dernier message: 18/11/2006, 21h17
  4. tableau bidimensionnels comment faire?
    Par yvon_huynh dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 18/08/2006, 09h15
  5. Réponses: 16
    Dernier message: 28/06/2006, 22h22

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