php - 有关循环的时候引用传值的问题
本文介绍了php - 有关循环的时候引用传值的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
对一个数组进行两次循环,第一次通过引用传值,改变了数组元素的值,第二次任然用$k,$v,为什么在没有用引用的情况下改变了数组最后一个元素的值?而且前面几个元素都没有变,就变了最后一个?
<?php
$arr = array(1,2,3,4,5);
foreach ($arr as $k => &$v) {
switch ($v) {
case '1':
$v = 'a';
break;
case '2':
$v = 'b';
break;
case '3':
$v = 'c';
break;
case '4':
$v = 'd';
break;
case '5':
$v = 'e';
break;
default:
# code...
break;
}
}
var_dump($v);
var_dump($arr);
foreach ($arr as $k => $v) {
var_dump($v);
}
var_dump($arr);
解决方案
$arr = array(1,2,3,4,5);
foreach ($arr as $k => &$v) {
switch ($v) {
case '1':
$v = 'a';
break;
case '2':
$v = 'b';
break;
case '3':
$v = 'c';
break;
case '4':
$v = 'd';
break;
case '5':
$v = 'e';
break;
default:
# code...
break;
}
}
var_dump($v);
var_dump($arr);
unset($v);//foreach 使用引用时在处理完后立即断开引用关系,或则把下面的$v=>$va
foreach ($arr as $k => $v) {
var_dump($v);
}
var_dump($arr);
第一次循环完 $v = e;//这边还是引用关系&$arr['e'];
第二次循环倒数第二步将 &$v = $arr['d'];然后 &$arr['e'] = &$v = $arr['d'];
这篇关于php - 有关循环的时候引用传值的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文