php循环函数foreach()中引用传递的使用

首先抛出问题:
给出一个数组,$arr = array(
    array('level'=>13,'name'=>'jack','num'=>0),
    array('level'=>21,'name'=>'peter','num'=>0)
    );
//遍历数组,符合条件的num值+1
foreach($arr as $key=>$value)
{
    if($value['level'] == 13)
    {
        ++$value['num'];
    }
}
var_dump($arr);
结果:
array(2) { [0]=> array(3) { ["level"]=> int(13) ["name"]=> string(4) "jack" ["num"]=> int(0)                [1]=> array(3) { ["level"]=> int(21) ["name"]=> string(5) "peter" ["num"]=> int(0) } 
}
说明:
在foreach()循环结束后,$key与$value的值并未立即释放,此时修改$value里元素的值不会影响到$arr的值。
引用:
下面引出正题:
如果想在遍历的过程中修改数组元素的值,需要对foreach里的$value使用引用,此时被引用的$value指向当前数组的内存地址,即修改$value的值会改变$arr[$key]的值。
栗子:
$arr = array(
    array('level'=>13,'name'=>'jack','num'=>0),
    array('level'=>21,'name'=>'peter','num'=>0)
    );
    
foreach($arr as $key=>&$value)
{
    if($value['level'] == 13)
    {
        ++$value['num'];
    }
}
var_dump($arr);
结果:
array(2) { [0]=> array(3) { ["level"]=> int(13) ["name"]=> string(4) "jack" ["num"]=> int(1)                [1]=> &array(3) { ["level"]=> int(21) ["name"]=> string(5) "peter" ["num"]=> int(0) } 
}
总结:在函数体使用引用传递可以在函数体外部获取函数体内的值,引用还有其他用法,继续学习^^^^

你可能感兴趣的:(php)