• PHP中使用foreach引用需要注意的问题


    本文目的

    今天在写项目时,发现php foreach语句中使用引用会出现奇特现象,故此记录此现象,原因和解决方法。希望对其他人有帮助!

    现象

    猜猜下面的代码会输出什么?

    <?php
    $a = array(1=>'one', 2=>'two');
    
    foreach ($a as $key => &$val) {} // do nothing
    var_dump($a);
     
    foreach ($a as $key => $val) {} // do nothing
    var_dump($a);

    如果没有遇到过类似的问题,肯定会对结果大惊!如下图

    image001.jpg

    我勒个去,怎么修改了数组,代码中没有任何显示修改数组的操作呀!

    原因

    在foreach中使用了引用,&$val,这个值并没有在第一个foreach退出后自动清空,而是保留在内容中,当进入第二个foreach时,仍然可以访问到$val。所以,在第二个foreach的第一次循环时,实际上已经修改了$a[1]的值。第二次循环时,值保持不变。

    解决方案

    第一次循环退出后,unset这个临时变量$val,如下代码所示:

    <?php
    $a = array(1=>'one', 2=>'two');
     
    foreach ($a as $key => &$val) {} // do nothing
    unset($val); // important!
    var_dump($a);
    
    foreach ($a as $key => $val) {} // do nothing
    var_dump($a);

    输出结果如下:

    image002.jpg

    参考资料

  • 相关阅读:
    全局变量和局部变量
    单例模式i
    高阶函数
    闭包和内存管理
    用python 写网络爬虫--零基础
    robots.txt 文件是什么? 如何获取
    Python: NLTK几个入门函数
    nltk book的下载
    nltk 环境安装( WINDOWS 7 32位 环境下)
    遇到问题
  • 原文地址:https://www.cnblogs.com/bourneli/p/2745130.html
Copyright © 2020-2023  润新知