Re: [LA-technique] PHP ; Remplissage d'array avec foreach

[ Thread Index | Date Index | More linuxarverne.org/technique Archives ]


Bonjour Daniel,

si je comprend bien tu souhaites travailler uniquement avec les tableaux traditionnels.

premier point, vu que que la propriété "recipe" de l'objet du xml est un tableau dont les indices ne sont pas explicitement définis, tu peux essayer plus simplement :
$mycookbook = array();
foreach($mycookfile->recipe as $value) {
	$mycookbook[] = (array) $value ;
}
// print_r($mycookbook);

tu obtiens un tableau d'objets "recipe" convertis en tableaux (via le transtypage (array)).
Attention cependant, les indices ingredient, recipetext, nutrition, comments restent de type SimpleXMLElement, il faudrait reboucler récursivement sur chaque indice de chaque élément recipe...

Le 2ième point est réglé dans la foulée :

print_r($mycookbook[0]['title']);

Pour le 3ième point, tu peux modifier la boucle initiale comme ceci :

$mycookbook = array();
$categories = array(); // tableau des catégories

foreach($mycookfile->recipe as $value) {
	$recipe = (array) $value; // recette actuelle
	$mycookbook[] = $recipe;  // ajout de la recette au tableau php
	// si pour la recette en cours, l'indice "category" existe :
	if(array_key_exists('category', $recipe)) {
		$categorie = $recipe['category'];
		// si la valeur catégorie ne figure pas dans le tableau des catégories :
		if(!in_array($categorie, $categories)) {
			array_push($categories, $categorie); // on ajoute cette nouvelle catégorie au tableau des catégories
		}
	}
}

print_r($mycookbook);
print_r(PHP_EOL . '--------------------' . PHP_EOL);
print_r($mycookbook[0]['title']);
print_r(PHP_EOL . '--------------------' . PHP_EOL);
print_r($categories);


bon courage : )

Fred.



Le 05/01/2015 10:05, Daniel Cartron a écrit :
  Bonjour,

Ça fait un bon moment que je n'ai plus travaillé sur les tableaux et j'ai des 
trous dans mes compétences...
Je veux remplir un array à partir d'un fichier xml. La structure du xml est la 
suivante :

<?xml version="1.0" encoding="utf-8"?>
<cookbook version="59">

	<recipe>
		<title></title>
		<preptime></preptime>
		<cooktime></cooktime>
		<ingredient>
			<li></li>
		</ingredient>
		<recipetext>
			<li></li>
		</recipetext>
		<url></url>
		<imagepath></imagepath>
		<imageurl></imageurl>
		<quantity></quantity>
		<rating>1</rating>
		<nutrition>
		</nutrition>
			<li></li>
		<comments>
			<li></li>
		</comments>
		<totaltime></totaltime>
		<description></description>
		<source></source>
		<video></video>
		<category></category>
	</recipe>

	<recipe>
	.../...
	</recipe>

</cookbook>

J'ai écrit :

  foreach($mycookfile->recipe as $key => $value) {
  $mycookbook[][$key] =  $value ;
} 

Mais ça me fait un array comme ça :

Array
(
    [0] => Array
        (
            [recipe] => SimpleXMLElement Object
                (
                    [title] => Caponata
                    [preptime] => 10 minutes
                    [cooktime] => 10 minutes
                    [ingredient] => SimpleXMLElement Object
                        (
                            [li] => Array
                                (
                                    [0] => 500 g d'aubergines en dés de 1 cm
				.../...
                                    [11] => Sel et poivre
                                )

                        )

etc.

Mon premier pb est que j'ai un niveau [recipe] inutile que je n'arrive pas à 
supprimer. L'index numérique ma suffit largement.

Mon second est que je n'arrive pas à afficher le contenu d'une cellule du 
tableau
    echo $mycookbook[0]["recipe"]["title"];
n'affiche rien.

Enfin je voudrais remplilr un autre tableau avec uniquement le contenu de 
category sans doublons, je ne trouve pas non plus.

Merci aux bonnes âmes...

-- Cordialement, Daniel Cartron « J’imagine un cocu disant : “Ce qui m’exaspère, c’est de penser que ce monsieur sait maintenant de quoi je me contentais. » Sacha Guitry — Bloompott, exergue du chapitre 17
-- Liste de discussions techniques de LinuxArverne http://wiki.linuxarverne.org/listes_de_diffusion



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/