2014-10-16 74 views
1

我想使用一個變量作爲未知深度的數組鍵。作爲數組鍵的變量

例子:

$a = array(); 
$arrayKey = '[0][1]'; 

我想要做的是替補:

$a[0][1] = "two levels deep"; 

${'a'.$arrayKey} = "two levels deep"; 

,但它似乎並沒有工作。

echo 'a'.$arrayKey;回報:a[0][1]

echo ${'a'.$arrayKey}回報two levels deep

,但我還是不能做

${'a'.$arrayKey} = "two levels deep"; 
echo $a[0][1]; 

這甚至可能嗎?它幾乎看起來好像是PHP解析a[0][1]作爲一個變量,而不是一個多維數組。

+1

你使用'$ arrayKey'和'$ arrayKeyA' - 是有意的還是隻是一個錯字...? – webeno 2014-10-16 17:31:57

+1

我會爲此做一個功能。我在這裏快速破解了一些東西:https://eval.in/206790(我試圖將其作爲回答發佈,但問題已關閉) – 2014-10-16 18:04:33

+0

非常有創意的解決方案Rocket Hazmat!感謝分享 – billynoah 2014-10-17 06:21:25

回答

0

這甚至有可能嗎?

對於一維陣列是對於多維陣列,沒有。至少不要單獨使用變量變量。有關替代方法,請參閱duplicate question

從PHP文檔上variable variables

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

多維數組複合歧義問題。我懷疑這是你能解決的問題。

+0

我閱讀了這些文檔,但這已經在我的示例中得到了解釋,它與前面的語法'$ {$ a [1]}'有點接近。無論如何,我在這裏嘗試的是一個有點不同的廣告,我試圖聲明索引,包括帶變量的括號 - 沒有將已經存在的索引作爲變量引用。 – billynoah 2014-10-16 19:21:16

+0

另外,如果你覺得這是一個重複,你會介意提供一個鏈接到哪裏?我搜索了,並且找不到與此相關的任何內容。 – billynoah 2014-10-16 19:22:01

+0

不要冷靜下來。 – 2014-10-16 19:47:05

2

聽起來像我一樣,你將不得不使用eval,假設它已在您的PHP安裝啓用。

像這樣也許:

$arrayKey = '[0][1]'; 
$a = array(); 
eval("\$a$arrayKey = 'hi there';"); 
print_r($a); 

陣列( [0] =>陣列 ( 1 =>您好 )

+1

雖然,'eval' *確實*工作,它不被推薦。有更好的方法。 – 2014-10-16 17:54:13

+0

對於這個特殊的問題,我真的很想知道哪個更好的方法存在,但是... :) – 2014-10-16 18:03:18

+0

似乎有點混亂,但確實有效!感謝您的想法..但我仍然想知道是否有更清潔的方法。 – billynoah 2014-10-16 19:24:21