2010-10-31 22 views
0

我試圖找出爲什麼這個工程:PHP:使用變量名,不適用於數組?

$joe = "hey joe"; 
$something = "joe"; 
print_r(${$something}); 

但這並不:

$joe["where_you_going"] = "hey joe"; 
$something = "joe[where_you_going]"; 
print_r(${$something}); 

這是爲什麼?有沒有辦法做到我在第二個例子中嘗試的?

+3

這兩件事都是可怕的語言「特徵」的例子,只有在絕對沒有其他選擇時才應該使用這些特徵。 – 2010-10-31 22:06:28

+0

在一個完美的世界裏,這將是因爲你不應該這樣做。 – delnan 2010-10-31 22:10:09

回答

0

變量變量語法不允許這樣做。
您的情況是否有意義,而不是做這些事情之一?

使用一個變量作爲數組索引:

$joe["where_you_going"] = "hey joe"; 
$something = "where_you_going"; 
print_r($joe[$something]); 


使用一個變量作爲陣列的名稱和另一個作爲索引:

$joe["where_you_going"] = "hey joe"; 
$something1 = "joe"; 
$something2 = "where_you_going"; 
print_r(${$something1}[$something2]); 


使用eval來評估整個表達式:

$joe["where_you_going"] = "hey joe"; 
$something = '$joe["where_you_going"]'; 
print_r(eval("return {$something};")); 
1

不,你不能那樣做。

「變量變量」的PHP思路通常比數組更好。

2

變量變量是PHP中的一個特殊功能,允許您的第一個示例:http://php.net/manual/en/language.variables.variable.php。這不是一個評估,因此它在第二個例子中不起作用。

在第二個示例joe [where_you_going]中有一個數組的名稱,括號運算符和索引的名稱。由於它們需要操作(索引到數組中),而不僅僅是命名,所以不能組合使用。你可以這樣做:

$joe["where_you_going"] = "hey joe"; 
$something = "joe"; 
$something_else = "where_you_going"; 
print_r(${$something}[$something_else]);