PHP的foreach语句使用引用变量的问题

今天在执行一个PHP程序的时候遇到一个诡异的问题:将数组print_r出来的数据是正确的,但使用foreach遍历数组时,倒数第2条记录的内容被改成了倒数第3条的,把foreach中的其它无关语句删除了也还是同样问题,foreach如下:

print_r($users_all);  //数据是正确的

foreach ( $users_all as $k => $u ) {//其中一条内容被篡改成了另外一条
  printf("%d - %s, tid:%d, uid:%d\n", $k, $u['section'], $u['tid'], $u['uid']);
}

 

这个诡异的问题一时让我摸不着头脑,我只能往前查看代码是否有一些可疑的地方,修改一些地方并加入了一些调试语句,竟莫名其妙的就正常了,经过一番分析总算找到了原因:在多个采用引用赋值的foreach内使用相同的变量名

 

在上面的代码前有下面2个foreach结构:

foreach ( $users_pri as &$u ) {

    ...

}

 

foreach ( $users_sec as &$u ) {

    ...

}

$users_all = array_merge($users_pri, $users_sec);

这2个foreach内都是用$u这个变量来引用数组记录,这导致$users_sec内的数据在使用foreach遍历时出现了不确定现象,将引用赋值改成拷贝赋值后就好了;按理说$u是在foreach内定义的,应该是一个局部变量,不应该产生全局效应,而且引起不确定的影响,这个应该是PHP的一个缺陷吧,本人不才不知其中的深层原因,待高人来分析。

 

 

 

 

 

转载于:https://www.cnblogs.com/edwardlost/archive/2010/09/19/1831245.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值