tableau multidimensionnel foreach

vladoum
Invité n'ayant pas de compte PHPfrance

28 mai 2012, 11:15

Bonjour,

Je cherche à créer avec une boucle foreach un tableau multidimensionnel. J'ai cherché un peu sur le net et j'ai trouvé une solution qui marche mais je ne comprends pas comment. J'aurai besoin de vos explications donc :)
function explodeTree($parts)
{
         $returnArr=array();
  	 $parentArr=&$returnArr;
	 foreach ($parts as $part){
	 	$parentArr[$part]=array();
	 	$parentArr=&$parentArr[$part];
	 }
         return $returnArr;
}

$parts=Array('bla','bli','blo');
$tree = explodeTree($parts);
echo("<pre>");
print_r($tree);
echo("</pre>");
Voila, je ne voit pas pourquoi on utilise "&$" dans la fonction et comment comme par magie le tableau final se retrouve dans $returnArr :?:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 mai 2012, 12:13

salut,

le & indique un passage par référence et non par valeur ?

Qu'est ce que ça signifie ?

un passage par valeur est simple à comprendre, on passe un valeur c'est tout.
Un passage par référence c'est le fait de donner à la fonction "l'adresse" de la variable et non sa valeur, ont dit que l'on passe une référence sur la variable.

le fait de passer une référence permet à la fonction qui reçois cette référence d'utiliser directement la variable (sans tenir compte de la portée des variables).
<?php
function explodeTree($parts)
{
         $returnArr=array();
         $parentArr=&$returnArr; // créer une référence et non un copie
         foreach ($parts as $part){
                $parentArr[$part]=array();
                $parentArr=&$parentArr[$part]; // idem
         }
         return $returnArr;
}
?>
$returnArr est donc modifié à chaque affectation de $parentArr.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 60 Messages

28 mai 2012, 12:16

Pour "plusser" @moogli,

tu trouves des infos à ce sujet dans la doc php
functions.arguments.by-reference
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.

vladoum
Invité n'ayant pas de compte PHPfrance

28 mai 2012, 18:17

Merci beaucoup pour vos réponses. Je vais essayer d'examiner ça de plus près.

Mammouth du PHP | 2278 Messages

28 mai 2012, 18:55

Un tableau multidimensionnel, dans mon esprit, est un tableau à plusieurs lignes et plusieurs colonnes:
sexe|fumeurs|abstinents
|garcons|85%|20%|
|filles|33%|67%
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD