有人可以向我解释一下:
$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”。
由于
答案 0 :(得分: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”。
答案 1 :(得分: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}},等等。
答案 2 :(得分:1)
为变量赋值的结果是值本身。因此,上述表达具有副作用,但没有这些副作用,可以写成:
$a = array( "b1", "b2", array("b3", "b4"));
答案 3 :(得分:1)
您可能只是使用错误的运算符来执行您要执行的操作。 =>用于在数组中设置键。
=这与这条线有效的原因相同:
if ($b1 = 'foo') {
echo $b1; // prints foo
}
赋值运算符(=)返回值。
答案 4 :(得分:1)
这没有什么令人困惑的。在数组内部,您有$b4 = "b4"
。双美元意味着,获取字符串并通过该名称访问变量,这又是“b4”