在php中为数组赋值

时间:2014-01-29 10:02:54

标签: php arrays

我有点好奇为什么会这样做:

$arr1[] = $arr2[] = $value;

如果我是正确的,首先将值推到arr2的末尾。然后$arr2[]推到$arr1的末尾。这是我很困惑的地方。如果我单独这样做:

$var = $arr2[];

我得到“致命错误:无法使用[]阅读......”

但是,当我在同一个语句中进行多项作业时,[]如何适用于阅读?

5 个答案:

答案 0 :(得分:2)

因为$ var不是数组。要使$ var成为一个数组:

$var = array();

,或者

$var = $arr2;

答案 1 :(得分:2)

  

如果我是正确的,首先将值推到$arr2的末尾。然后   $arr2[]推到$arr1

这不正确。会发生的是$value被推送到两个数组的末尾,一次一个。短语“$arr2[]被推送”是没有意义的,因为表达式$arr2[]在读取上下文中无效(即它没有“有值”),这正是你得到的错误信息你的第二次尝试说。

  

但是当我做多项任务时,为什么会有[]用于阅读   在同一个声明中?

在PHP中链接赋值运算符并不像在某些其他语言中那样工作。特别是,

$x = $y = (expr);

的处理方式与编写

的方式相同
// the purpose of $temp is to prevent (expr) from being evaluated twice,
// because evaluating it might have side effects (e.g. think $i++)
$temp = (expr);
$x = $temp;
$y = $temp;

也就是说,$arr1[]没有直接赋值$arr2[]而是$value,因为赋值运算符求值为右侧操作数。

答案 2 :(得分:1)

这个建议是错误的:

  

然后$ arr2 []推到$ arr1的末尾。

从手册:

  

赋值表达式的值是指定的值。那是,   “$ a = 3”的值是3.这可以让你做一些棘手的事情......

因此,第一个赋值运算符$arr2[] = $value返回$ value的值,可以进一步赋值。

答案 3 :(得分:0)

But how come [] works for reading when I'm doing multiple assignments in the same statement?

它没有。

尝试var转储它

$a = array();
var_dump ($a[] = 2);

返回

int(2)

然后将该值传递给第二个$b = $a = 2

执行$a=2,返回2,然后将该值分配给$b[]

var_dump($a[]);
另一方面

没有意义,因为var_dump($a[])不存在,它只能用于写入数组

答案 4 :(得分:-1)

$arr1[] = $arr2[] = $value;这是有效的,因为您首先将变量或字符串分配给数组$arr2[],然后再将该数组分配给另一个数组$arr1[]
但是在$var = $arr2[];的情况下,您正在将数组分配给不允许的正常变量。

为此,您需要将$ var作为数组生成$var = array();