PHP在foreach中对$value赋值无效的问题

首先我们看下这段代码:

			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 进行操作,就可以达到我们的目的了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值