2011-06-09 64 views
1

我有一大堆的陣列,它們存儲在像$需要,$保留等不同變量...PHP - 可變的變量和array_merge() - 不工作

我想允許(內函數)要傳遞的選項數組(如$options = array('required', 'reserved')),然後將使用該數組來定義將哪些數組合並在一起並在函數結尾處返回。

所以,我有這樣的代碼在功能的一部分,應該抓住所有的選項和合並的陣列,使用可變變量來從選項數組中傳遞的字符串)數組:

$array = array(); 

foreach ($options as $key) { 
    $array_to_merge = ${$key}; 
    array_merge($array, $array_to_merge); 
} 

return $array; 

但是,當我返回$數組時,它顯示0個項目。如果我print_r($array_to_merge);,我實際上得到整個陣列,我應該。

是否array_merge()根本不能用於變量變量,還是我在這裏丟失了一些東西......?

+0

您是否試過'array_push()'而不是?我已經使用過它,並取得了很多成功。 – 2011-06-09 17:23:19

+0

變量變量最好避免在腳本中使用,因爲它們可以創建一個難以調試的混淆。如果像這樣的事情是相關的,你通常更好的定義他們作爲一個數組與他們的名字作爲索引。 – Wrikken 2011-06-09 17:30:21

回答

4

array_merge返回合併數組,你不會將該返回值分配給任何東西,因此它正在丟失。

$array = array_merge($array, $array_to_merge); 

應該解決您的問題。

+0

是的,恩,剛纔注意到了。哎呦!有時候,這是最愚蠢的事情... – geerlingguy 2011-06-09 17:22:44

+0

這一個回答我的問題,雖然我也非常喜歡馬里奧的答案在下面...感謝您的幫助! – geerlingguy 2011-06-09 17:55:09

1

如果我沒有看錯,你也可以簡化你的代碼(代替循環)只是:

$array = call_user_func_array("array_merge", compact($options)); 

compact替代變量變量查找並獲取陣列的列表。實際上,只需要一個array_merge調用。

+0

哇,太棒了!從來沒有使用/看過compact()之前,它幾乎完全是我需要的......不幸的是,我在這裏有一個多維數組,所以我不知道在這種情況下compact是否最好。 – geerlingguy 2011-06-09 17:54:13