2012-02-13 63 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”