修改数组元素
如果希望通过下面的代码,对数组中的每个元素执行计算,是无法实现的。
$data = [1, 3, 5];
foreach ($data as $item){
$item *= 2;
}
echo '<pre/>';
print_r($data);
代码分析:PHP在循环中处理的是数组的副本。循环结束时将丢弃副本,并随之丢弃计算结果。
解决方案:要更改原始数组,需要通过引用将每个元素的值传递到循环中。
$data = [1, 3, 5];
foreach ($data as &$item){
$item *= 2;
}
unset($item);
echo '<pre/>';
print_r($data);
循环结束时,临时变量会包含最后一个数组元素重新计算后的值。为了避免后续代码意外的修改该值,建议在循环之后释放临时变量(unset($item)
)。
修改关联数组的值
$user = [
'name' => 'Tom',
'age' => '15',
'sex' => 'boy',
];
foreach ($user as $key => $value){
$user[$key] = strtoupper($value);
}
echo '<pre/>';
print_r($user);
修改数组的键
数组的键不能通过引用传递,只有数组值可以。如果尝试foreach ($user as &$key => $value)
会触发致命错误。
如要修改关联数组的每个键,只需要在循环内对其修改。
$user = [
'name' => 'Tom',
'age' => '15',
'sex' => 'boy',
];
foreach ($user as $key => $value){
$user[ucfirst($key)] = strtoupper($value);
}
echo '<pre/>';
print_r($user);
这样做会导致原始键和修改后的键一起保留。如果只需要保留修改后的键,则需要释放原始键。
$user = [
'name' => 'Tom',
'age' => '15',
'sex' => 'boy',
];
foreach ($user as $key => $value){
$user[ucfirst($key)] = strtoupper($value);
unset($user[$key]);
}
echo '<pre/>';
print_r($user);