PHP foreach &符号的用法,需要注意的坑


“PHP foreach &符号的用法,需要注意的坑” 的解决办法:
$array = [
	'a' => [
		'a1' => 1,
		'a2' => 2
	],
	'b' => [
		'a1' => 1,
		'a2' => 2
	],
	'c' => [
		'a1' => 1,
		'a2' => 2
	]
];

 

如果我们想把a,b,c中的a1的值修改为11:

 

常规写法:

 

foreach ($array as $k => $v) {
	$array[$k]['a1'] = 11;
}

 

使用&符号写法:

 

foreach ($array as $k => &$v) {
	$v['a1'] = 11;
}

 

在线运行

 

 

使用&符号需要注意的地方:

 

遍历结束后,需要释放掉$v的值。如果不释放,恰好下面还有有一个foreach同样使用的是 $k => $v 那么会影响到下面的foreach的$v的值!!!

 

例如,恰好我们需要再次把a2的值修改为22,使用&的方式示例:

 

unset($v); // $v的值释放掉,这个很关键

foreach ($array as $k => &$v) {
	$v['a2'] = 22;
}

 

工作中遇到了,做一个记录。