2012-02-13 96 views
0

有人可以給我講解一下:內部數組分配值

$a = array($b1 = "b1", $b2 = "b2", array($b3 = "b3", $b4 = "b4")); 

echo $$$$$a[2][1]; 

爲什麼這是合法的嗎?輸出仍爲「b4」,甚至回顯$a[2][1],$$a[2][1],$$$[2][1]等。

我期望的是,如果回顯$a[2][1]但它仍然回顯字符串「b4」,它會查找變量「b4」。

謝謝

+5

此代碼讓我感到恐懼 – Ascherer 2012-02-13 17:23:37

+2

@Ascherer同意。使我的眼睛流血。某處撕裂了一個天使的臉頰。 – rdlowrey 2012-02-13 17:27:27

回答

1

將值分配給變量的結果是值本身。因此,上述表達式有副作用,但如果沒有這些副作用,也可以寫成:

$a = array("b1", "b2", array("b3", "b4")); 
6

基本上就是發生在這裏的是,你宣佈$ b *的變量,你把它們添加到陣列。以上代碼相當於

Array("b1","b2", Array("b3", "b4")); 

這又是相當於

Array(0 => "b1", 1 => "b2", 2 => Array(0 => "b3", 1 => "b4")); 

的第二陣列是有效地包括陣列索引的PHP添加默認情況,其中沒有定義的索引。

當輸入

Array($b1 = "b1"); 

$b1 = "b1" 

被評價爲 「B1」 插入之前在數組中。

+2

+1瞭解? – Ascherer 2012-02-13 17:37:12

1

您可能正在使用錯誤的操作符來處理您正在嘗試執行的操作。 =>用於設置數組中的鍵。

的工作=出於同樣的原因這條線的工作原理:

if ($b1 = 'foo') { 
    echo $b1; // prints foo 
} 

賦值運算符(=)返回該值。

6
$a = array($b1 = "b1", $b2 = "b2", array($b3 = "b3", $b4 = "b4")); 

在你的數組中,你沒有設置任何鍵。您正在爲變量$b1,$b2,$b3$b4設置值,然後在(數值)數組中使用這些值。因此,$b4 = "b4"。這將$b4設置爲字符串"b4",然後將其添加到數組中。

$a[2][1]是字符串"b4",所以$$a[2][1]$b4其值是"b4",這使得$$$a[2][1]"b4",等等。

1

對此沒有任何困惑。在陣列中你有$b4 = "b4"。雙美元的意思是,獲取字符串,並通過該名稱訪問該變量,這又是「b4」