• php foreach引用赋值


      在写代码时发现php foreach引用赋值会导致意外的行为。

      代码示例:

      <?php 
            $arr = array('a','b','c');
            foreach($arr as $k=>&$v) 
            {
            }        
            print_r($arr);
     
            foreach($arr as $k=>$v)
            {     
            }        
            print_r($arr);
       ?> 
        输出结果:
        Array ( [0] => a [1] => b [2] => c ) Array ( [0] => a [1] => b [2] => b )
     
        经过查找资料,找到原因。其实,第一个foreach结束后,数组$arr最后一个元素$v的引用仍然保留。在进行第二个foreach循环时,实际上是对数组$arr的第三个元素的三次赋第二个foreach开始执行时,每次数组$arr的变化如下:
        第一次: Array ( [0] => a [1] => b [2] => a ) 
        第二次: Array ( [0] => a [1] => b [2] => b ) 
        第三次: Array ( [0] => a [1] => b [2] => b ) 
        所以会有最后的输出结果。
     
        为了避免这种情况,可以在第一个foreach结束后,取消掉引用:unset($v)。但是,为了避免不可预期的结果出现,慎用foreach引用赋值。

     
     
     
     
  • 相关阅读:
    saltstack源码详解一
    linux的yum报错
    django restframework
    列表生成式
    面向对象的封装
    linux对于zombie的处理
    Flask学习目录
    #1_两数之和
    LeetCode入门
    Struts2(一)——基本使用
  • 原文地址:https://www.cnblogs.com/tianxintian22/p/6193246.html
Copyright © 2020-2023  润新知