値渡し
値をコピーして渡しているため、元の変数に影響を与えない。
関数
関数値渡し
<?php
$tar = 1;
function plusOne($tar){
$tar++;
}
plusOne($tar);
var_dump($tar); //int(1)
関数は引数を受け取ったあと、そのコピーを作って処理をする
foreach
基本
- ループ回数
- 要素の数と一致する。
- 下記のループ回数=$valueの数
- 値渡し
- \$keyと$valueはループごとに値が変わる。
- 値をコピーしているため、元の変数($arr)に影響を与えない
foreach基本
<?php
foreach ($arr as $key => $value) {
//...code
}
値渡し
foreach値渡し
<?php
$arr = [
0 => [
'a' => 'あ',
'b' => 'あ',
'c' => 'あ',
],
1 => [
'd' => 'う',
'e' => 'う',
'f' => 'う',
],
];
foreach ($arr as $key => $value) {//2回ループ
foreach ($value as $k => $v) {//6回ループ
//$v = str_replace('あ','い',$v);
//var_dump
$value[$k] = str_replace('あ','い',$v);//※1 $vは'「あ」のまま'
//var_dump
$value[$k] = $v;//ここで元の配列を操作
//var_dump
}
//var_dump
$arr[$key] = $value;//ここで元の配列を操作
//var_dump
}
- var_dumpと書いてあるとこでvar_dumpしてみると理解が深まる
- ※1:この記事上部の関数の値渡しをおさらい
- 関数(ここではstr_replace)に値を渡して処理した後は、返り値に処理後の内容が反映される
- ある変数に処理をし、その変数を上書くときは、左辺と右辺に記載する変数を同じにするとバグが防げる
- × \$value[\$k] = str_replace('あ','い',\$v);
- 〇 \$value[\$k] = str_replace('あ','い',\$value[$k]);