2010-05-27 68 views
3

我想使用foreach循環一個數組列表並向每個數組添加一個元素。PHP foreach作爲變量

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

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

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

是使用$ {$ arrayName} []最好的方法來做到這一點嗎?是否有另一種選擇,而不是使用大括號?它目前的作品,但我只是想知道是否有更好的選擇。

感謝

回答

9

使用參考。

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

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

參考是不需要的。 foreach($ myArrays as $ i => $ arr){$ myArrays [$ i] [] =「foo」; } – Adrian 2010-05-27 16:26:47

+1

它仍然是一個存儲在'$ myArrays'中的引用,否則'$ myArrays [$ i]'將是'$ tom'和'$ sally'的副本,而不是原件。從技術上講,它會保留原件直到它們被更改,在這一點上php將複製它們。 – Tesserex 2010-05-27 16:29:41

5

如果你堅持這個結構,我想說堅持你在那裏幹什麼。但評論可能會很好。

如果你可以重新排列東西,爲什麼不把它們嵌套呢?

$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

不需要大括號。

$$arrayName[] 

原始行可能是PHP中的錯誤?

雖然我不知道爲什麼你總是需要這樣做......

+1

實際上,對於數組,需要花括號。自己測試一下。 – Adrian 2010-05-27 16:19:25

0

有些人會罵你使用變量變量。你可以做這樣的事情:

$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

使用常規for循環而不是foreach似乎不必要的混淆。 – Tesserex 2010-05-27 16:20:56

0

沒試過,但應該工作,太:

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

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

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