1.PHP中的源码函数-- foreach()的用法详解
2.深入理解PHP中的foreach
PHP中的函数-- foreach()的用法详解
PHP
4
引入了
foreach
结构,和
Perl
以及其他语言很像。源码这只是源码一种遍历数组简便方法。foreach
仅能用于数组,源码当试图将其用于其它数据类型或者一个未初始化的源码变量时会产生错误。有两种语法,源码壁纸动态源码下载第二种比较次要但却是源码第一种的有用的扩展。
复制代码
代码如下:
foreach
(array_expression
as
$value)
statement
foreach
(array_expression
as
$key
=>
$value)
statement
第一种格式遍历给定的源码
array_expression
数组。每次循环中,源码当前单元的源码值被赋给
$value
并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的源码事,只除了当前单元的源码键名也会在每次循环中被赋给变量
$key。
自PHP
5
起,源码还可能遍历对象。源码
注意:当
foreach
开始执行时,源码数组内部的指针会自动指向第一个单元。这意味着不需要在
foreach
循环之前调用
reset()。windbg源码调试驱动
注意:除非数组是被引用,foreach
所操作的是指定数组的一个拷贝,而不是该数组本身。foreach对数组指针有些副作用。除非对其重置,在
foreach
循环中或循环后都不要依赖数组指针的值。
自
PHP
5
起,可以很容易地通过在
$value
之前加上
&
来修改数组的bitbake编译源码包元素。此方法将以引用赋值而不是拷贝一个值。
复制代码
代码如下:
<?php
$arr
=
array(1,
2,
3,
4);
foreach
($arr
as
&$value)
{
$value
=
$value
*
2;
}
//
$arr
is
now
array(2,
4,
6,
8)
>此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。
复制代码
代码如下:
<?php
foreach
(array(1,
2,
3,
4)
as
&$value)
{
$value
=
$value
*
2;
}
>深入理解PHP中的foreach
深入理解PHP中的foreach 在PHP中,foreach循环是处理数组的常用工具,但由于其与其它语言的差异,容易引起混淆和错误。本文主要探讨了PHP5与PHP7中foreach的区别,以及值遍历和引用遍历的溯源码的好处情况,旨在帮助开发者更好地理解和使用foreach。 PHP5和PHP7中foreach的区别在于,PHP7通过值遍历时,实际操作的是数组的副本,而非数组本身。当循环结束时,副本会被重新赋值给数组。下面的方维全套源码代码展示了这一特性: 运行结果:phfpf 值遍历的特性包括:foreach循环时确实复制了一份数组,循环的是副本。
循环结束后,副本会重新赋值给数组,因此打印循环后的数组会返回赋值后的数组。
在PHP7中,循环时未影响数组指针,指针仍然指向数组的第一位。
值迭代时,foreach始终操作数组副本,对数组的操作不会影响到迭代行为。
引用遍历则较为复杂,主要问题在于数组最后一个元素的$value引用在foreach循环后仍保留。下面的代码展示了这种情况: 运行结果:0 => 2, 1 => 4, 2 => 4 这里,因为$value引用未销毁,导致预期结果不符合。foreach结构等同于以下操作:第一遍循环,$v=$arr[0]触发,$arr[2]=$arr[0],$arr变为2,4,2
第二遍循环,$v=$arr[1],$arr[2]=$arr[1],$arr变为2,4,4
第三遍循环,$v=$arr[2],$arr[2]=$arr[2],$arr变为2,4,4
解决方案是使用unset()销毁最后一个元素的引用。引用遍历的特性包括:最后一个元素的$value引用在foreach循环后仍保留。
引用循环时,数组修改会影响循环。
在处理引用传递时,如果在函数中使用unset()销毁变量,仅销毁局部变量,原数组值不受影响。例如: 输出结果:Array ( [0] => 3 [1] => 4 [2] => 5 ), Array ( [0] => 3 [1] => 4 [2] => 4 ) 了解这些特性后,可以避免常见的foreach错误,并更高效地使用foreach循环处理数组。 如有疑问,欢迎指正。