PHP中foreach用&出现的问题

$arr = [1, 2, 3]; foreach ($arr as $key => &$v) {     $a = 1; } var_dump($arr); foreach ($arr as $key => $v) {     $a = 1; } var_dump($arr); 跟预期的结果不太一样,查了下资料,原因就在于foreach中的引用在foreach完成后并没有释放,也就是说在第一个foreach中的引用一直保留着,当第一个foreach完成后,$v是指向$arr[2]的一个引用,修改$v会修改$arr的值,再第二个foreach中,不断的将$arr中的值赋给$v,即第二个foreach执行中$arr的值在不断地变化,首先是$arr[0]赋给$v,$v修改$arr[2]的值,变为1,然后是$arr[1]赋给$v,$v修改$arr[2]的值,变为2。 总结下原因就是在第一次foreach之后因为用了&号,$v的指针指向了$arr[2],所以在以后的foreach循环时得到的$v就会赋值给$arr[2]   这样的问题比较难以找出原因,所以要求我们在写代码的时候养成良好的习惯,如果在foreach中适用引用&来改变数组或者对象的值,那么在foreach完成后一定得手动释放引用。  

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...