LoginSignup
0
0

More than 3 years have passed since last update.

foreachで連想配列の要素を変更したい場合は参照渡しする

Posted at

参照渡しとは

この内容については、独習PHP 第3版で以下のように説明されています。

変数に値を格納→厳密にはコンピュータ上に用意されたメモリに格納

メモリにはそれぞれの場所を表す番号(アドレス)が振られている。

変数とは、値の格納先(アドレス)に対してつけられた名札みたいなもの

「=」演算子で変数を代入する=メモリ上の値を別のアドレスにコピーする

ref_val.php
<?php
$x = 1;
$y = $x;   // $xの値を$yにコピー
$x = 5;    // $xの値を変更
print $y;  // 結果:1($xの変更に影響しない)
?>

参照渡し_概念1.png

一方、参照(リファレンス)による代入は、メモリ上のアドレスそのものを引き渡す代入のこと

ref_ref.php
<?php
$x = 1;
$y = &$x;   // $xのアドレスを$yにコピー
$x = 5;    // $xの値を変更
print $y;  // 結果:5($xの変更に影響する)
?>

参照渡し_概念2.png

foreach命令→デフォルトでは配列要素を値渡し

foreach_val.php
<?php
$data = ['渋谷区','豊島区','品川区','新宿区'];
foreach($data as $value){
   $value = '東京都'.$value;
}
print_r($data) // 結果:Array([0] => 渋谷区、[1] => 豊島区、[2] => 品川区、[3] => 新宿区
?>

したがって、連想配列の要素を変更したい場合は「&」をつけて参照渡しする

foreach_ref.php
<?php
$data = ['渋谷区','豊島区','品川区','新宿区'];
foreach($data as &$value){
   $value = '東京都'.$value;
}
print_r($data) // 結果:Array([0] => 東京都渋谷区、[1] => 東京都豊島区、[2] => 東京都品川区、[3] => 東京都新宿区
?>

参考文献

この記事は以下の情報を参考にして執筆しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0