XML et tableau ?

Petit nouveau ! | 1 Messages

22 août 2007, 16:54

Bonjour,, j'utilise simple xml et j'arrive correctement a afficher les données que je souhaite, mais j'ai un petit souci, voici un exemple du fichier xml :

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-1"?> <annonces> <annonce> <id>100018601</id> <texte>blablabla</texte> <photos> <photo>100018601</photo> <photo>200018601</photo> <photo>300018601</photo> <photo>400018601</photo> <photo>500018601</photo> <photo>600018601</photo> </photos> </annonce> </annonces>
je n'arrive pas a extraire les photos, en effet soit je n'en affiche qu'une (la premiere) soit je n'arrive pas a les afficher (pourtant si je met un flag je vois bien ma boucle se faire). Voici mon code :

Code : Tout sélectionner

$xml = simplexml_load_file("fichier.xml"); foreach ($xml->annonce as $annonce) { $chaine = $annonce->id; $chaine .= $annonce->texte; //ici le probleme : foreach ($xml->annonce->photos->photo as $photo) { $img = $photo->photo; echo "$img<br>"; } }

Merci de m'éclairer

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

22 août 2007, 17:42

Tu t'es planté dans la variable de la seconde boucle. Au passage, fais comme moi, nomme tes variables du nom de l'élément qu'elles représentent.
$annonces = simplexml_load_file("fichier.xml");
foreach ($annonces->annonce as $annonce) {
	$chaine = $annonce->id;
	$chaine .= $annonce->texte;

	foreach ($annonce->photos->photo as $photo) {
		$img = $photo->photo;
		echo "$img<br>";
	}
}

Invité
Invité n'ayant pas de compte PHPfrance

23 août 2007, 09:45

j'ai donc renommer la seconde variablre pour eviter les effets de bord voici donc :

Code : Tout sélectionner

$i = 0; foreach ($annonce->photos->photo as $laphoto) { $img = $laphoto->photo; echo "$i : $img<br>"; $i++; }
a priori j'esperais que cela me donne :

0 : image0.jpg
1 : image1.jpg
2 : image2.jpg
3 : image3.jpg
4 : image4.jpg
5 : image5.jpg

mais j'ai cela :

0 :
1 :
2 :
3 :
4 :
5 :

Donc ma boucle ce fait bien, mais les variables ne s'affichent pas etrange ? qu'est ce que j'ai loupé ?

merci :oops:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

23 août 2007, 11:27

Quand une variable ne donne pas ce que tu attends, utilise les fonctions d'inspection comme print_r() ou var_dump(). Même si dans le cas de SimpleXML, le résultat est un petit peu plus difficile à interpréter.

En l'occurence, je n'ai pas fait attention à l'intérieur de la seconde boucle et je me suis trompé de variable. $photo représente le contenu de chaque élément <photo>, chaque $photo représente le nom directement. La boucle devrait donc ressembler à
foreach ($annonce->photos->photo as $photo) { 
	echo $photo, '<br>';
}