PHP 简明教程

PHP 更新数组元素

1. PHP 更新数组元素

要更新现有的数组项,您可以引用其对应的数字索引(针对索引数组)或键名(针对关联数组)来进行重新赋值操作。

示例

将数组中的第二个元素从 "BMW" 更改为 "Ford":

$cars = array("Volvo", "BMW", "Toyota");
$cars[1] = "Ford";

注意: 数组的第一项索引是 0

对于关联数组,请使用其对应的键名来更新数据项:

示例

将汽车年份(year)更新为 2024:

$cars = array("brand" => "Ford", "model" => "Mustang", "year" => 1964);
$cars["year"] = 2024;

2. 在 Foreach 循环中更新数组项

foreach 循环中更改数组项的值有几种不同的技术。

其中一种有效的方法是在变量赋值时插入 & 字符(按引用赋值)。这样做可以确保在循环内部对数组项所做的任何更改,都会直接应用到原始数组本身上。

示例

将数组中所有的元素值都更改为 "Ford":

$cars = array("Volvo", "BMW", "Toyota");

foreach ($cars as &$x) {
  $x = "Ford";
}

unset($x);
var_dump($cars);

极其重要: 记得在循环结束后添加 unset() 函数!如果省略它,变量 $x 将仍然保持对数组最后一个元素的内存引用。这意味着之后任何对 $x 的意外修改,都会直接改变数组的最后一个元素。

为了演示这一点,请看如果在 foreach 循环之后且没有使用 unset() 的情况下,我们更改 $x 的值会发生什么:

示例

演示忘记使用 unset() 函数的严重后果:

$cars = array("Volvo", "BMW", "Toyota");

foreach ($cars as &$x) {
  $x = "Ford";
}

// 此时 $x 依然引用着数组的最后一个元素 ($cars[2])
$x = "ice cream"; 

var_dump($cars);
// 结果输出中,最后一个元素会变成 "ice cream",而不是预期的 "Ford"