2010-05-27 7 views
3

Je voudrais utiliser foreach pour boucler une liste de tableau et ajouter un élément à chaque tableau.php foreach comme variable

$tom = array('aa','bb','cc'); 
$sally = array('xx','yy','zz'); 

$myArrays = array('tom','sally'); 

foreach($myArrays as $arrayName) { 
    ${$arrayName}[] = 'newElement'; 
} 

L'utilisation de $ {$ arrayName} [] est-elle la meilleure façon de procéder? Y at-il une autre option plutôt que d'utiliser des accolades? Cela fonctionne actuellement mais je me demande simplement s'il existe une meilleure alternative.

Merci

Répondre

9

Utiliser des références.

$myArrays = array(&$tom, &$sally); 

foreach($myArrays as &$arr) { 
    $arr[] = 'newElement'; 
} 
+0

Les références ne sont pas nécessaires. foreach ($ myArrays comme $ i => $ arr) {$ myArrays [$ i] [] = "foo"; } – Adrian

+1

c'est toujours une référence stockée dans '$ myArrays', sinon' $ myArrays [$ i] 'sera une copie de' $ tom' et '$ sally' à la place des originaux. Techniquement, il conservera les originaux jusqu'à ce qu'ils soient changés, à quel point php les copiera. – Tesserex

5

Si vous êtes coincé à cette structure, je dirais bâton à ce que vous faites là. Mais un commentaire pourrait être sympa.

Si vous pouvez réorganiser les choses, pourquoi ne pas les imbriquer?

$tom = array('aa','bb','cc'); 
$sally = array('xx','yy','zz'); 

$myArrays = array(&$tom, &$sally); // store the actual arrays, not names 

// note the & for reference, this lets you modify the original array inside the loop 
foreach($myArrays as &$array) { 
    $array[] = 'newElement'; 
} 
0

Aucune accolade nécessaire.

$$arrayName[] 

La ligne d'origine est peut-être un bug en PHP?

Bien que je me demande pourquoi vous jamais besoin de le faire de toute façon ...

+1

En fait, pour les tableaux, les accolades sont nécessaires. Testez-le vous-même. – Adrian

0

Certaines personnes vous gronderont pour l'utilisation de variables variables. Vous pouvez faire quelque chose comme ceci:

$tom = array('aa','bb','cc'); 
$sally = array('xx','yy','zz'); 

$myArrays = array(&$tom, &$sally); 

for($i=0; $i<sizeof($myArrays); ++$i) { 
    $myArrays[$i][] = 'newElement'; 
} 
+1

en utilisant une boucle for normale au lieu de foreach semble inutilement confuse. – Tesserex

0

pas essayé, mais devrait fonctionner aussi:

$tom = array('aa','bb','cc'); 
$sally = array('xx','yy','zz'); 

$myArrays = array('tom','sally'); 

foreach($myArrays as $key => $value) { 
    $$value[] = 'newElement'; 
}