zoukankan      html  css  js  c++  java
  • php 循环数组问题

    $a = array('abe','ben','cam');
     //foreach遍历数组时,实际上是遍历的数组的一个拷贝,并且在开始遍历之前会把指针指向拷贝的开始;,根据cow机制,写时,重新复制一份数组内的单元
    foreach ($a as $k=>&$n){
        $n = $n; 
    //相当于下面
    // $n =&$a['0'];
    // $n =&$a['1'];
    // $n =&$a['2'];
    }
    //unset($n); //好习惯
    
    print_r($a);
      
    foreach ($a as $k=>$n){ // notice NO reference here! 
    
    // k=0     &$a[2] = n = abe   ['abe','ben','abe']
    // k=1     &$a[2] n=ben       ['abe','ben','ben']
    // k=2     &$a[2] n=cam       ['abe','ben','ben']
       echo "$n
    ";
    }
    print_r($a);
    

      

    $data = ['a','b','c','d'];
    
    foreach ($data as $key => $val) 
    {
    	$val = & $data[$key];
    	
    }
    
    echo "<pre>";
    print_r($data);
    

      

    1,php在变量赋值时候的内存使用策略:写时复制(copy on write, COW),当用赋值方法把一个变量值赋给另一个变量时,由于这两个变量值相同,因此公用同一内存,当其中一个变量值发生变化时候,才会重新为值变化的变量申请内存,已达到节省内存的目的;
    2,foreach遍历数组时,实际上是遍历的数组的一个拷贝,并且在开始遍历之前会把指针指向拷贝的开始;
    3,在发生写时复制时候,指针的位置也会一并被复制

  • 相关阅读:
    MySQL -- 表联结
    Unittest方法 -- 项目实现自动发送邮件
    Linux工作中常用命令
    Requests方法 -- Token获取操作
    Requests方法 -- 关联用例执行
    Requests方法 -- Blog流程类进行关联
    Requests方法 -- 参数化
    defer和async的区别
    js函数收藏:获取cookie值
    XSHELL使用技巧总结
  • 原文地址:https://www.cnblogs.com/boundless-sky/p/7629808.html
Copyright © 2011-2022 走看看