From: http://my.oschina.net/guomingliang/blog/215457

php 中遍历一个array时可以使用for或foreach,foreach的语法为:foreach ($arr as $k => $v)。遍历数组,把index赋给$k,数组的值赋给$v,那么此处的赋值是传值还是传引用呢。先看下面的例子:

$arr = array(

array(‘id‘ => 1, ‘name‘ => ‘name1‘),

array(‘id‘ => 2, ‘name‘ => ‘name2‘),

);

foreach ($arr as $obj) {

$obj[‘id‘] = $obj[‘id‘];

$obj[‘name‘] = $obj[‘name‘] . ‘-modify‘;

}

print_r($arr); //输出的结果

Array(

[0] => Array (

[id] => 1

[name] => name1

)

[1] => Array(

[id] => 2

[name] => name2

)

)

观察可以发现在foreach循环中对$arr操作并没有影响到$arr的元素,所以这里的赋值是传值而不是传引用。那如果需要修改$arr中元素的值该怎么办呢?可以在变量前面加一个”&”符号,例如:

foreach ($arr as &$obj) {

$obj[‘id‘] = $obj[‘id‘];

$obj[‘name‘] = $obj[‘name‘] . ‘-modify‘;

}

再看另外一个例子,array里面存放的是object,

$arr = array(

(object)(array(‘id‘ => 1, ‘name‘ => ‘name1‘)),

(object)(array(‘id‘ => 2, ‘name‘ => ‘name2‘)),

);

foreach ($arr as $obj) {

$obj->name = $obj->name  . ‘-modify‘;

}

print_r($arr); //输出的结果

Array

(

[0] => stdClass Object

(

[id] => 1

[name] => name1-modify

)

[1] => stdClass Object

(

[id] => 2

[name] => name2-modify

)

)

此时可以看到原始数组中的object对象已经修改了,所以这里的赋值又是传引用而不是传值

综合上述,得出的结论:如果数组里面存放的是普通类型的元素就是采用传值的方式,存放对象类型元素采用的方式为传地址。

原文:http://www.cnblogs.com/joeblackzqq/p/5161580.html

php+foreach+传值传值,php foreach 传值还是传引用相关推荐

  1. 2021-01-14python函数传参是传值还是传引用? 参数若是简单类型是传值 若是对象类型则是传引用,python是兼容两者传参方式的

    python函数传参是传值还是传引用? 首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题. ...

  2. C++中的参数传递方式:传值、传地址、传引用总结

    指针:指针是一个变量,只不过这个变量中存储的是一个地址,指向内存中的一个单元. 引用:引用和原变量是同一个东西,只不过是原变量的一个别名. int a = 10; 定义一个整型变量aint *p = ...

  3. JavaScript 是传值调用还是传引用调用?

    1. 例子 先来看两个个来自于 <JavaScript 高级程序设计>P70-P71 的两个例子. 1.1. 基本类型参数传递 function addTen(num) {num += 1 ...

  4. Java中的形参和实参的区别以及传值调用和传引用调用

    名词解析: 1.形参:用来接收调用该方法时传递的参数.只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间.因此仅仅在方法内有效. 2.实参:传递给被调用方法的值,预先创建并赋予确定值. 3 ...

  5. 5个php实例,细致说明传值与传引用的区别

    传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值 传引用 :真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值 说明: 传值 ...

  6. C++ 函数参数传递:传值,传指针,传引用

    PS:首先理解形参   实参概念.形参是在函数定义的括号内定义的专用变量,它们的目的是保存按实参传递给它们的信息,实参被列在函数调用语句的括号内. int func(int x)//x是形参 {ret ...

  7. 条款22: 尽量用“传引用”而不用“传值”

    c语言中,什么都是通过传值来实现的,c++继承了这一传统并将它作为默认方式.除非明确指定,函数的形参总是通过 "实参的拷贝"来初始化的,函数的调用者得到的也是函数返回值的拷贝. 正 ...

  8. 经典 Python参数传递采用的肯定是“传对象引用”的方式。相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象

    python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用"的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或 ...

  9. JAVA中是传值还是传引用?回答KEZHANG问题

    首先,推荐对Java有一定理解的同仁一本书<Practical Java>.在<Practical Java>中也有一个章节介绍Java中关于传值和传引用的问题,堪称经典. & ...

  10. golang 传值 传引用 简介

    目录 1. 基础类型 2. struct 3. 函数 4. slice 5. map 6. chan 7. 总结 1. 基础类型 byte,int,bool,string,float,数组等均是传值. ...

最新文章

  1. C++中Ansi、Unicode、UTF8字符串之间的转换和写入
  2. 全球 43 亿 IPv4 地址宣告耗尽!
  3. Series([] , [‘索引‘]) 数据字典 {‘项值 ’:键值}
  4. 通用 图片/文字 水印函数
  5. PtQt4标准对话框——QFileDialog
  6. Go程序:演示map用法
  7. 旷视Face++回清华求教AI本质创新,姚期智授2锦囊,出任首席顾问
  8. 华硕笔记本重装系统按哪个键进u盘启动项
  9. 泛微oa系统什么框架_泛微移动办公OA系统走进江苏国曜信息科技有限公司
  10. C++实现整数值转中文大写
  11. visio业务流程图教学_用visio软件怎样画数据流程图和业务流程图?
  12. Java游戏编程不完全详解-2
  13. OutLook 2013 添加 USC gmail 邮箱 解决国内USC邮箱打不开
  14. 类似三角形数的一般推导公式
  15. poj 1655 Balancing Act 树状dp
  16. 关于isl28022电源芯片的校准寄存器的配置问题
  17. [Python] 制作超级玛丽游戏
  18. 常见的目标检测中的背景建模方法
  19. 计算机宏应用实例,计算机等级考试二级Access宏的使用教程
  20. 2021华为软件精英挑战赛总结(复赛第12名)

热门文章

  1. K8s高可用集群部署
  2. Mybatis学习笔记(九) —— Mybatis逆向工程
  3. Spring Cloud之Zuul网关集群
  4. JVM的内存区域划分(转摘)
  5. 直接选择排序(Straight Selection Sort)
  6. cnblogs用户体验评价
  7. MVC5+EF6--1 创建Entity Framework数据模型
  8. 微软软件开发技术二十年回顾(MFC篇)
  9. 【Github使用感触之一】使多文件多版本变得简单
  10. 基于Colaboratory平台使用VGGNet网络进行图片分类