Problème de tableau

gorby
Invité n'ayant pas de compte PHPfrance

09 déc. 2005, 12:00

Bonjour à tous,

Je ne sais pas si ce problème est spécifique à PHP5 mais je ne l'avais jamais rencontré avant et j'utilise la version 5 depuis peu.

Voilà:
<?php
class cXML
{
    private $fichierXML;
    private $contenuXML;

    function __construct($file)
    {
        $this->fichierXML=$file;
        $this->contenuXML = array();
    }

    function fichierEnTableau()
    {
        //Récupère le contenu du fichier XML dans un tableau
        $chaine = implode("",file($this->fichierXML));
        $parser = xml_parser_create();
        xml_parse_into_struct($parser, $chaine, $this->contenuXML);
        xml_parser_free($parser);
    }

    function afficher()
    {
        //Ecrit les fonctions Javascript pour afficher le menu
        $tabloLevel = array_fill(0,15,"0");
        $tabloResult = array();
        $numeroDiv=0;   //Numéro incrémenté à chaque Calque pour avoir un nom de calque unique
        $lastLevel=1;   //Numéro de level du tag XML précédent
        $levelMax=0;   //Numéro de level Max atteint pour la boucle sur tabloLevel

        echo"<BR><BR><BR><BR>";
        for($i=0;$i<count($this->contenuXML);$i++)
        {
            if(($this->contenuXML[$i]["type"]!="cdata")&&($this->contenuXML[$i]["type"]!="close"))
            {

                $tabloLevel[$this->contenuXML[$i]["level"]][1]=$numeroDiv;
                echo "<BR>-".$tabloLevel[$this->contenuXML[$i]["level"]][1]."-$numeroDiv-<BR>";

                if($this->contenuXML[$i]["level"]<$lastLevel)
                {
                    $tabloLevel[$this->contenuXML[$i]["level"]][0]=($tabloLevel[$this->contenuXML[$i]["level"]][0])+1;
                    //On supprime tous ce qui se trouve après le level ou on est revenu en mettant les valeurs à (position(level))-1
                    $j=($this->contenuXML[$i]["level"])+1;
                    while(isset($tabloLevel[$j][0]))
                    {
                        //position
                        $tabloLevel[$j][0]=($tabloLevel[$this->contenuXML[$i]["level"]][0])-1;
                        //numDiv
                        $tabloLevel[$j][1]="";
                        $j++;
                    }
                }
                else
                {
                    if(($this->contenuXML[$i]["level"])==$lastLevel)
                    {
                        $tabloLevel[$this->contenuXML[$i]["level"]][0] = ($tabloLevel[$this->contenuXML[$i]["level"]][0])+1;
                    }
                    else
                    {
                        $tabloLevel[$this->contenuXML[$i]["level"]][0] = ($tabloLevel[($this->contenuXML[$i]["level"])-1][0]);
                    }
                }

                $lastLevel=$this->contenuXML[$i]["level"]; //lastLevel pour le prochain tour de boucle
                if($this->contenuXML[$i]["level"]>$levelMax)
                {
                    $levelMax=$this->contenuXML[$i]["level"]; //On ajuste levelMax si nécessaire
                }

                //Parcour de tabloLevel pour créer les dépendances pour chaque calque
                if($this->contenuXML[$i]["level"]>0)
                {
                    //$tabloResult[$tabloLevel[$this->contenuXML[$i]["level"]-1]["numDiv"]] = $tabloResult[$tabloLevel[$this->contenuXML[$i]["level"]-1]["numDiv"]].','.$tabloLevel[$this->contenuXML[$i]["level"]]["numDiv"];
                }

                //Ecriture du calque
                echo'<BR>
            <DIV id="calqueMenu'.$numeroDiv.'"
               style="
               visibility:visible;   
               position:absolute;
               top:'.(($tabloLevel[$this->contenuXML[$i]["level"]][0]-1)*20).'px;
               left:'.(($this->contenuXML[$i]["level"]-1)*100).'px;
               background-color:red;
               width:100px;
               height:20px">
               <CENTER><A HREF="http://www.monsite.com" class="lienMenu">'.$this->contenuXML[$i]["value"].'</A></CENTER>
            </DIV>';

                $j=0;
                while($j<15){
                    echo" ".$tabloLevel[$j][0];
                    $j++;
                }
                echo"<BR>";
                $numeroDiv++;
            }
        }
    }
}
?>

Eléphant du PHP | 413 Messages

15 déc. 2005, 12:19

Bonjour,

Les éléments du tableau $tabloLevel sont des chaînes de caractères.
$tabloLevel = array_fill(0,15,"0");
Donc quand tu fais :
$tabloLevel[$this->contenuXML[$i]["level"]][1]=$numeroDiv;
tu demandes à ce que le caractère en position 1 de la chaîne placée en position $this->contenuXML[$i]["level"] du tableau $tabloLevel soit mis à la valeur de $numeroDiv.

Je pense que le problème que tu décris vient de là.
--
Goeb

Administrateur PHPfrance
Administrateur PHPfrance | 250 Messages

19 déc. 2005, 08:46

Bonjour à tous,

Je ne sais pas si ce problème est spécifique à PHP5 mais je ne l'avais jamais rencontré avant et j'utilise la version 5 depuis peu.

Voilà:
ca manque de clarté ton probleme...