【php foreach 使用&(与运算符)引用赋值要注意的问题】教程文章相关的互联网学习教程文章

深入解析PHP中foreach语句控制数组循环的用法_php技巧

foreach是PHP中很常用的一个用作数组循环的控制语句。 因为它的方便和易用,自然也就在后端隐藏着很复杂的具体实现方式(对用户透明) 今天,我们就来一起分析分析,foreach是如何实现数组(对象)的遍历的。 我们知道PHP是一个脚本语言,也就是说,用户编写的PHP代码最终都是会被PHP解释器解释执行, 特别的,对于PHP来说,所有的用户编写的PHP代码,都会被翻译成PHP的虚拟机ZE的虚拟指令(OPCODES)来执行,不论细节的话,就是说,...

php foreach、while性能比较

foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。 在循环里进行的是数组“读”操作,则foreach比while快: 代码如下:foreach ($array as $value) { echo $value; } while (list($key) = each($array)) { echo $array[$key]; } 在循环里进行的是数组...

php foreach 使用&(与运算符)引用赋值要注意的问题

foreach 通过在 $value 之前加上 & 很容易就能修改数组的单元,如: PHP代码 代码如下:foreach($arr as $value){ $value .= 4; } 但这个用法也很容易造成错误,而且也不容易找。 看例子更直截了当: PHP代码 代码如下:<?php $arr = array(a,b,c); $arr2 = array(d, e, f); foreach($arr as $value){//习惯用$value或$val $value .= 4; } //都处理完毕我们在页面模版输出,首先输出$arr2 foreach($arr2 as $value){//习惯用$value...

PHP 数组遍历方法大全(foreach,list,each)

在PHP中数组分为两类: 数字索引数组和关联数组。 其中数字索引数组和C语言中的数组一样,下标是为0,1,2… 而关联数组下标可能是任意类型,与其它语言中的hash,map等结构相似。 下面介绍PHP中遍历关联数组的三种方法: 方法1:foreach 代码如下:<?php $sports = array( football => good, swimming => very well, running => not good); foreach ($sports as $key => $value) { echo $key.": ".$value."<br />"; ?> 输出结果:...

php foreach 参数强制类型转换的问题

所以,为了防止这样的信息出现,我使用foreach的时候,都会把参数进行强制类型转换,形势如下: foreach((array)$arr as $key => $value); 这样做一直相安无事,就在前几天,突然出现了问题。我强制类型转换以后不能正常的调用object的方法了。 代码如下:<?php class service implements Iterator{ function __construct($service_define,$filter=null){ $this->iterator = new ArrayIterator($service_define[list]); $this->fil...

PHP中foreach循环中使用引用要注意的地方

代码如下:foreach ($array as &$row) { $row = explode(/, $row); } foreach ($array as $row) { //do something } 这么写,在第二个循环会出逻辑错误,加入第二个循环中do something的地方是输出$row,循环到最后一个的时候的输出是倒数第二个元素,而不是最后一个 要这么写 代码如下:foreach ($array as &$row) { $row = explode(/, $row); } unset($row); foreach ($array as $row) { //do something } 或者第一个循环这么写...

php中用foreach来操作数组的代码

foreach()有两种用法: 代码如下:foreach(array_name as $value) { statement; } 这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一 步,也就是下次循环回得到下一个元素。 代码如下:foreach(array_name as $key => $value) { statement; } 这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中...

PHP中for与foreach的区别分析

注意: 除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此数组指针不会被 each() 结构改变,对返回的数组单元的修改也不会影响原数组。 1. 自php5起,foreach 还可能遍历对象的属性。 2. 自php5起,foreach 可以很容易地通过在 $value 之前加上 & 来修改数组的单元,此方法将以引用赋值而不是拷贝一个值。 代码如下:<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value ...

php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo

代码如下:$id = intval($_GET[id]); $row = $db->getResult($db->query("select * from ".$t."product where id=$id;")); $rows = $row[0];//处理mysql_fetch_assoc返回来的数组 不用foreach----echo!

PHP中使用foreach和引用导致程序BUG的问题介绍

代码如下:$a = array(1, 2); $b = array(11, 12); foreach($a as &$r){ } foreach($b as $r){ } echo $a[1]; // 输出 12 两个的循环的本意可能是: 第一个循环需要在循环中修改元素的内容, 所以使用引用; 但第二个循环只是把 $r 当作一个临时变量. 可是, 为什么 $a[1] 的值发生了改变呢? 当对 $a 的迭代完成后, $r 是 $a[1] 的引用, 改变 $r 的值, 就是改变 $a[1]. 这时, 你可以会奇怪, 代码中并没有修改 $r, 也没有修改 $a[1] 呀?...

php循环语句 for()与foreach()用法区别介绍

for 循环是 PHP 中最复杂的循环结构。它的行为和 C 语言的相似。 for 循环的语法是: for (expr1; expr2; expr3) statement 第一个表达式(expr1)在循环开始前无条件求值一次。 expr2 在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。 expr3 在每次循环之后被求值(执行)。 每个表达式都可以为空。expr2 为空意味着将无限循环下去(和 C 一样,PHP 认为其值为 TRUE)。这可能...

探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释

自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。 代码如下:<?php$arr = array(1, 2, 3, 4);foreach ($arr as &$value) { $value = $value * 2;}// $arr is now array(2, 4, 6, 8)?>此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。 代码如下:<?phpforeach (array(1, 2, 3, 4) as &$value) { $value = $value * 2;}?>

PHP中的函数-- foreach()的用法详解

PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。 代码如下:foreach (array_expression as $value) statementforeach (array_expression as $key => $value) statement第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的...

如何在smarty中增加类似foreach的功能自动加载数据

在smarty中使用自定义插件来加载数据(见:编写Smarty插件在模板中直接加载数据的详细介绍),在使用的时候还是感觉不够方便,灵机一动就想写成类似foreach那种标签:第一步:在Smarty_Compiler.class.php的_compile_tag函数中增加: 代码如下://加载数据的开始标签case 'load': $this->_push_tag('load'); return $this->_complie_load_start($tag_args); break;//加载数据的结束标签case '/load': $this->_pop_tag('load'); retu...

深入解析php中的foreach问题【图】

前言:php4中引入了foreach结构,这是一种遍历数组的简单方式。相比传统的for循环,foreach能够更加便捷的获取键值对。在php5之前,foreach仅能用于数组;php5之后,利用foreach还能遍历对象(详见:遍历对象)。本文中仅讨论遍历数组的情况。foreach虽然简单,不过它可能会出现一些意外的行为,特别是代码涉及引用的情况下。下面列举了几种case,有助于我们进一步认清foreach的本质。问题1: 代码如下:$arr = array(1,2,3);foreac...