$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\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,在发生写时复制时候,指针的位置也会一并被复制

php 循环数组问题的更多相关文章

  1. 前端开发:setTimeout与setInterval 定时器与异步循环数组

    前端开发:setTimeout与setInterval 定时器与异步循环数组 前言: 开通博客园三个月以来,随笔记录了工作中遇到的大大小小的难题,也看过无数篇令人启发的文章,我觉得这样的环境是极好的, ...

  2. lintcode循环数组之连续子数组求和

    v 题目:连续子数组求和 II 给定一个整数循环数组(头尾相接),请找出一个连续的子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.如果多个答案,请返回其中任意一个. ...

  3. 51nod 1050 循环数组最大子段和

    题目链接:51nod 1050 循环数组最大子段和 #include<stdio.h> #include<algorithm> using namespace std; ; l ...

  4. 深入理解循环队列----循环数组实现ArrayDeque

    我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势.此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构 ...

  5. 1042 数字0-9的数量 1050 循环数组最大子段和 1062 序列中最大的数 1067 Bash游戏 V2 1092 回文字符串

    1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数.   比如 10-19,1出现11次 ...

  6. 【循环数组的最大字串和】Maximal-sum Subsequence

    [循环数组的最大字串和]Maximal-sum Subsequence PROBLEM 题目描述 给一个 N×N 的矩阵 M,可以取连续的一段数(必须是横着或者竖着或者斜着,这个矩阵是循环的,具体如下 ...

  7. shell 循环数组

    循环数组 ;i<${#o[*]};i++)) do echo ${o[$i]} done

  8. 整理JavaScript循环数组和对象的方法

    众所周知,常用的循环语句有for.while.do-while.for-in,forEach以及jQuery中提供的循环的方法:以及ES6中提供的很多用来循环对象的方法如map, 在 Javascri ...

  9. CodeForces 598B(循环数组)

    对于循环数组的问题,就是找偏移K后位置 偏移后位置=起始位置+(相对位置+K)%(长度+1) #include <iostream> #include <string> #in ...

  10. 51Nod 1050 循环数组最大子段和 | DP

    Input示例 6 -2 11 -4 13 -5 -2 Output示例 20 分析: 有两种可能,第一种为正常从[1 - n]序列中的最大子字段和:第二种为数组的total_sum - ([1-n] ...

随机推荐

  1. EM算法——Expectation-Maximization

    最大似然估计 一个栗子:假如去赌场,但是不知道能不能赚钱,你就在门口堵着出来一个人就问一个赚了还是赔了,如果问了5个人都说赚了,那么你就会认为,赚钱的概率肯定是非常大的. 已知:(1)样本服从分部的模 ...

  2. Qt基础学习(3)-----滑动条之QSlider

    //mydialog.h #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDialog> class QLineEdit; class Q ...

  3. crontab 定时执行python脚本

    每天8点30分运行命令/tmp/run.sh * * * /tmp/run.sh 每两小时运行命令/tmp/run.sh */ * * * /tmp/run.sh

  4. c代码,输出i,j,k互不相同的三位数

    #include <stdio.h> int main() { int i,j,k; printf("\n"); for(i=1;i<5;i++){ for(j= ...

  5. CentOS6.X、7.X下Jenkins的安装及使用

    一.相关概念 1.1 Jenkins概念: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenk ...

  6. PHP中封装Redis购物车功能

    <?php // 服务层 namespace Common\Service; use Vendor\Func\Red; class CartService extends CommonServi ...

  7. 内连接查询输出到datagridView

    实现步骤: 1. 新建两张对应表的类 例如: 第一张表对应的类 { class ManagerInfo { public Table1 group { get; set; } //重点 需要内连接的字 ...

  8. JAVA创建子进程并处理waitFor() 阻塞问题

    虽然很想休息,但是想想还是要把今天学的东西记下来,不然以后再用还是新知识. 新建一个线程类读取子进程的汇报信息和错误信息,避免阻塞 class StreamGobbler extends Thread ...

  9. echarts画中国地图并上色

    任务是画一个中国地图,并在指定区域上颜色,学姐说用arcgis画,乖乖,4个g的安装文件,算了, 还是echarts大法好..如果想熟悉这个牛X的工具,请移步https://www.w3cschool ...

  10. 中标麒麟Linux7 如何关闭广播消息

    chmod 600 /usr/libexec/sysnotify pkill -9 sysnotify