通常的foreach的调用如下:
foreach ($array as $key=>$value){
...
}
假定这里的$array是一个一维的相关数组,$key是数组的索引,$value是这个索引的值。
为了能让你更好的理解foreach的工作过程,我们创建一个数组,用foreach对$array进行遍历:
<?php
$array = array('first'=>'ibm','second','hp');
foreach ($array as $key=>$value){
echo $key.'=>'.$value.'<br/>';
}
结果输出如下:
first=>ibm
0=>second
1=>hp
第一次循环,$key = 'first',$value = 'ibm',这个时候,实际foreach对$array执行了一个我们看不见的操作:next($array),将数组指针向前(这里的“向前”跟PHP手册相同,不是我们通常所理解的“向前”)移一。然后echo语句输出”first=>ibm”。
第二次循环,首先会判断数组$array的当前指针是否已经到了数组的末尾,如果是,结束循环,否则进入第二次循环。当然这样的判断在进入第一次循环的时候也会有,如果$array是一个空数组,那么就会直接执行循环下面的语句。此时,$key = second','value' = 'hp',next($array)后,输出”second=>hp”。然后进行判断,数组指针已经到达末尾,执行下面的语句。
重点:这种方式下,foreach每次只是传递一个值,而不是真的对数组元素进行操作。具体到上面的例子,如果你想在每个数组元素的后面加上 'company' 这个字符串,那么$value .= 'company'这样的操作是不行的,它并不会改变数组元素的值,这个时候你应该这样用:$array[$key] .= 'company';
以上部分整理修改自:https://wfyang.blog.51cto.com/65117/10278/
当然还有一种是:
foreach ($arr as &$value){
echo $value;
}
看下面的例句:
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
print_r($arr);
执行完结果是:
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
发现没?和上面的不同了吧,这玩意儿直接把数组元素的值改了。
转摘网页上是这么说的:自PHP5起,可以很容易地通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。
如果不加&的话,则代码:
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as $value) {
$value = $value * 2;
}
print_r($arr);
执行后的结果是:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
值不会发生改变。
&仅在被遍历的数组可以被引用时才可用(例如是个变量)。
所以下面的代码执行是会报错的,大概是因为指针无法定位吧。
<?php
foreach (array(1, 2, 3, 4) as &$value) {
$value = $value * 2;
}
第二种方法的部分内容整理自:https://www.jb51.net/article/38957.htm
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。
留言