PHP 速習チュートリアル

PHP 配列要素の更新

1. PHP 配列要素の更新

既存の Array 要素を更新(アップデート)するには、添字配列(Indexed Array)の場合は インデックス番号 を、連想配列(Associative Array)の場合は キー名 を参照します。

1.1 例:添字配列の更新

2番目の要素を "BMW" から "Ford" に変更します:

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

       注意: 最初の要素の インデックス は 0 です。

1.2 例:連想配列の更新

キー名 を指定して、"year" を 2024 に更新します:

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

2. foreach ループ内での要素の更新

foreach ループ内で要素の値を変更する場合、いくつかのテクニックがあります。

一つの方法は、代入時に & 文字を挿入して、要素の値を リファレンス(参照渡し) として割り当てることです。これにより、ループ内で行った変更がオリジナルの Array に直接反映されるようになります。

2.1 例:すべての要素の値を "Ford" に変更する

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

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

unset($x); // 参照を解除
var_dump($cars);

       注意: ループが終わった後は、必ず unset() 関数を呼び出してください。これを忘れると、Variable$x は最後の Array 要素への リファレンス を保持したままとなり、後の処理で予期せぬ挙動を引き起こす可能性があります。

この影響を実証するために、foreach ループの後に $x の値を変更するとどうなるかを見てみましょう。

2.2 例:unset() を忘れた際の影響

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

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

// unset($x) を忘れた場合:
$x = "ice cream"; // 最後の要素(Toyotaだった箇所)が "ice cream" に上書きされる

var_dump($cars);