有人可以給我講解一下:內部數組分配值
$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」。
謝謝
有人可以給我講解一下:內部數組分配值
$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」。
謝謝
將值分配給變量的結果是值本身。因此,上述表達式有副作用,但如果沒有這些副作用,也可以寫成:
$a = array("b1", "b2", array("b3", "b4"));
基本上就是發生在這裏的是,你宣佈$ 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」 插入之前在數組中。
+1瞭解? – Ascherer 2012-02-13 17:37:12
您可能正在使用錯誤的操作符來處理您正在嘗試執行的操作。 =>用於設置數組中的鍵。
的工作=出於同樣的原因這條線的工作原理:
if ($b1 = 'foo') {
echo $b1; // prints foo
}
賦值運算符(=)返回該值。
$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"
,等等。
對此沒有任何困惑。在陣列中你有$b4 = "b4"
。雙美元的意思是,獲取字符串,並通過該名稱訪問該變量,這又是「b4」
此代碼讓我感到恐懼 – Ascherer 2012-02-13 17:23:37
@Ascherer同意。使我的眼睛流血。某處撕裂了一個天使的臉頰。 – rdlowrey 2012-02-13 17:27:27