2016-01-13 89 views
0

它是這樣的php:使用字符串變量動態地訪問數組

我有一個變量,其中有一個數組索引。

$var = 'testVar["abc"][0]'; 

$var = 'testVar["xyz"][0]["abc"]'; 

,也可能是在運行時什麼。

現在,當我嘗試使用這個PHP代碼訪問此:

echo $$var; 

echo ${$var}; 

我得到一個警告說,非法的行偏移......

但如果我用這個代碼,它的工作原理

eval('echo $'.$var); 

我不想使用eval()。有沒有其他方法?

編輯:

變量$的testvar是一個數組建立在運行時,它可以有多維數組動態生成。它的格式不固定,只有腳本通過使用某些變量來知道該數組可能是什麼。

例如,在任何時候,數組可能都有一個索引$["xyz"][0]["abc"],我想要動態訪問它。

我的PHP版本是5.1

+0

你可以'var_dump'那個'$ testVar'變量嗎? –

+0

您使用的是哪個版本的PHP?什麼是警告? – borracciaBlu

回答

5

按照documentation,你正在試圖完成是不可能的:

爲了使用可變的變量與數組,必須解決一個模棱兩可的問題。也就是說,如果你編寫$$a[1],那麼解析器需要知道你是否打算使用$a[1]作爲變量,或者如果你想要$$a作爲變量,然後是該變量的[1]索引。解決這種歧義的語法是:第一種情況爲${$a[1]},第二種情況爲${$a}[1]

在你的情況下,$$var試圖讀取名稱爲testVar["xyz"][0]["abc"]的變量,而不是索引數組。你可以像這樣解引用數組:

$a = "testVar"; 
echo ${$a}["xyz"][0]["abc"]; 
+0

更多解決方案:http://stackoverflow.com/questions/10466815/php-variable-variables-with-array-key和http://stackoverflow.com/questions/2036547/variable-variables-pointing-to-arrays-或嵌套對象 –

+0

其實我不能使用你在上面的代碼中提到的方法,即'$ a =「testVar」; echo $ {$ a} [「xyz」] [0] [「abc」];'因爲運行時未知的實際部分是'[「xyz」] [0] [「abc」]'做任何事情在運行時 –

+0

@ImranAhmed我建議你重新考慮你的軟件設計。如果你依賴這樣的變量變量,我認爲你應該以不同的方式進行設計。如果這是不可能的(遺留代碼,時間限制等),你就會陷入'eval'。 –