我有点好奇为什么会这样做:
$arr1[] = $arr2[] = $value;
如果我是正确的,首先将值推到arr2的末尾。然后$arr2[]
推到$arr1
的末尾。这是我很困惑的地方。如果我单独这样做:
$var = $arr2[];
我得到“致命错误:无法使用[]阅读......”
但是,当我在同一个语句中进行多项作业时,[]
如何适用于阅读?
答案 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();