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++;
}
}
}
}
?>