记录一个广为流传的关于使用PHP引用的坑。
$arr = ['abc', 'ben', 'cam', 'day']; foreach($arr as $key=>&$val){ $val = strtoupper($val); } foreach($arr as $val){ echo "$val\n"; print_r($arr); } echo "===END===\n"; print_r($arr);
解释:
//第二次使用$val做foreach循环时,此时$val还是保持着对$arr数组里的最后一个元素($arr[3])的引用。
//所以对于这个foreach,
//1st ==> $arr[3]=’abc’
//2nd ==> $arr[3] = ‘ben’
//3rd ==> $arr[3] = ‘cam’
//4th ==> $arr[3] = ‘day’
所以正确的做法是在使用引用的foreach结束后马上unset($val)
或者干脆不用使用引用,foreach时使用$key=>$val格式,然后使用$arr[$key]方式修改变量并保存。