有人可以给我讲解一下:内部数组分配值
$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