zoukankan      html  css  js  c++  java
  • 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

    参考资料

  • 相关阅读:
    ubuntu下pip的安装和使用
    跨域总结
    本地存储小结
    SVN
    appium整理文档
    appium python andiroid自动化文档整理笔记
    Python 接口测试(二)
    Python 接口测试(一)
    Python 接口测试(四)
    Python 接口测试(三)
  • 原文地址:https://www.cnblogs.com/bourneli/p/2745130.html
Copyright © 2011-2022 走看看