在数组内分配值

时间:2012-02-13 17:17:13

标签: php

有人可以向我解释一下:

$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 个答案:

答案 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”