首先我们看下这段代码:
foreach ($data as $key => $value) {
$value['name'] = '测试在value中赋值';
}
$data中原始的数据为:
现在看运行的结果:
没有任何变化。
然后我们改变下代码:
foreach ($data as $key => $value) {
$data[$key]['name'] = '测试在value中赋值';
}
然后现在我们看输出结果:
成功。
我们分析下原因。
首先我们查看文档 PHP: foreach - Manual 可以看到里面有这么一句话:
每次循环中,当前单元的值被 <strong>赋给</strong> $value 并且数组内部的指针向前移一步
PHP在这里, 是直接复制当前单元的值,也就是说 $value 相当于是另外的一个变量,只是跟 $data 里面的变量相同,除此之外跟 $data没有任何关系。所以,我们给 $value 赋值并不能达到我们的目的。
在 C或者C++中,就相当于我们是采用 int fun(int a) 的方式,是直接将数据复制一个进去,而不是采用 int fun(int *a) 这样传递指针的方式。由此也可以看出PHP效能较低的一个方面。
当将代码改成第二种形式的话,我们就是直接对 $data 进行操作,就可以达到我们的目的了。