2011/12/11

PHPのforeachで参照渡し

PHP 



PHP の foreach は、値渡しなのでループの中で中身を書き換えることはできない。

$array = array('apple', 'banana', 'caviar');

foreach ($array as $key => $value) {
	if ($value == 'caviar') {
		$value = 'cocoa';  // キャビアをココアに変更
	}
}

var_dump($array);
こうなる
array(3) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(6) "banana"
  [2]=>
  string(6) "caviar"  // ← キャビアのまま
}

そこで、$value を&$value とし、参照渡しで変数生成させるようにしてみる。

$array = array('apple', 'banana', 'caviar');

foreach ($array as $key => &$value) {
	if ($value == 'caviar') {
		$value = 'cocoa';  // キャビアをココアに変更
	}
}

var_dump($array);
こうなる
array(3) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(6) "banana"
  [2]=>
  &string(5) "cocoa"  // ← ココアに変更された!!
}


このエントリーをはてなブックマークに追加