• php foreach & 地址引用 的时候碰到的坑


    转载自https://blog.csdn.net/lambert310/article/details/77938088
    这个地方最好找个数组自己试验下 最后一个

    //简称1  
    foreach($data as $key=>&$valeu)
    {
    
    }
    //当再次foreach $data数组时候 简称 2
    foreach($data as $key=>$value)
    {
    }
    2 中的结果可能因为1中的地址引用 每个$value不一定是你预想的循环的那样    解决办法如下  unset($value)  再详细的看下文的PHP官网函数介绍 
    
    

    以下内容转载自他人博客

    在PHP中,array是最常用的结构了,可以当做队列、堆栈、hash等结构使用,所以遍历array最常用的foreach循环,我们用得很多,但其实foreach循环中有一个隐藏的坑,如下代码:

    <?php
    
    $arr = [1,2,4];
    
    foreach($arr as &$a){
        $a = $a*$a;
    }
    
    print_r($arr);
    
    foreach($arr as $a){
        print_r($a);
    }
    
    

    此时打印出$arr的结果是1、4、9

    但第二个循环中打印出的结果是1、4、4

    为什么会出现这个问题呢?

    详见手册:http://php.net/manual/zh/control-structures.foreach.php

    Warning 数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。

    而在foreach的实现里,每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步。

    当我们在第一个foreach中以引用的方式使用元素,循环结束之后,$v 其实是数组最后一个元素的引用。

    由于foreach不销毁最后一个元素,所以当第一个循环结束时,我们有了一个隐藏的变量v,它是指向数组v,它是指向数组arr 最后一个元素的引用。

    而我们在第二个循环中继续以v命名,则会让v命名,则会让v指向的元素不断的被覆盖。从而使得第二个循环中,最后一次循环时得到的值和倒数第二次循环时相同。

  • 相关阅读:
    Nginx 七层反向代理
    Nginx Rewrite域名及资源重定向!(重点)
    对FPM 模块进行参数优化!
    Nginx压力测试及通用优化
    LNMP架构及应用部署!(重点)
    安装PHP解析环境!
    Mysql安装并修改字符集 ----> 基于源码包安装
    Nginx安装部署!
    python入门
    Android学习进度三
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655143.html
Copyright © 2020-2023  润新知