お久しぶりです!
12月の忙しさにかまけて、ブログの更新が滞ってしまってました。
すいません。
今回は私の愛用している言語、PHPにて下記のforeach()が何をしているかを解説したいと思います。
foreach ($array as $key => $value) {
//処理内容
}
よく見る↓は理解してるけど、
foreach ($arrays as $array) {
//処理内容
}
"=>"
って何よ!?
と思っている方はぜひ読んでみてください。
foreach()とは
そもそもforeach()とは何でしょうか?
超~ザックリいうと、配列(やコレクション)が入っている変数を分解した後、
繰り返し処理していくことです。
基本的にはこのように書きます
foreach ($arrays as $array) {
//処理内容
}
例
変数 $likeFoods の中身が以下だとします。
array:3 [
0 => "sushi"
1 => "tempura"
2 => "ramen"
]
foreach()で処理します
foreach ($likeFoods as $likeFood) {
dd($likeFood . 'が好きです');
}
処理の結果
// 1回目のループ
"sushiが好きです"
// 2回目のループ
"tempuraが好きです"
// 3回目のループ
"ramenが好きです"
解説
1回目のループで、$likeFoodsを分解。一番上の"sushi"
が$likeFoodに入ります。
中の処理で、$likeFoodに入った"sushi"
に「が好きです」をくっつけます。
処理を止めて出力します。
2回目のループは、$likeFoodsの2番目"tempura"
が$likeFoodに入ります。
中の処理は1回目と同じことをします。
3回目も同じ処理をたどります。
補足
dd($変数);はPHPのフレームワークLaravelで導入さている関数です。
こちらは処理を止めて$変数の中身を出力します。
なので例で挙げているコードの場合、本当は一回目のループの時点で処理は終了してしまいますが、解説の都合上、目をつぶっていただければと思います。
以降に解説させていただく例でも、同様ですのでご了承ください。
foreach ($array as $key => $value)
基本的なforeach()を抑えていただいたところで、本題に移ります。
以下のように書かれている場合、どのような動きになるのでしょうか?
foreach ($array as $key => $value) {
//処理内容
}
先に答えを書きますと、foreach()の処理の中で連想配列のkeyとvalueどちらも必要な場合はこれを使います。
連想配列とは?
配列のkey(左側)に任意の名前を付けられた配列のことです。
例えばこんな感じ
array:3 [
"HP" => "150"
"attack" => "130"
"defense" => "125"
]
左側の"HP"
がkey。 右側の"150"
がvalueとなります。
次項に例を挙げましたので、通常のforeach($arrays as $array)と比較してみましょう。
例
以下の連想配列を使用します。
// 配列を作成
$user = [
'name' => 'Catherine',
'age' => 20,
'hobby' => 'reading'
];
foreach ($arrays as $array)の場合
foreach()の処理の中で、連想配列のvalue
のみが取得できます。
foreach ($user as $detail) {
dd($detail);
}
処理の結果
// 1回目のループ
"Catherine"
// 2回目のループ
20
// 3回目のループ
"reading"
foreach ($array as $key => $value) の場合
foreach()の処理の中で連想配列のkey
とvalue
どちらも取れます!
foreach ($user as $item => $value) {
dd($item, $value);
}
処理の結果
// 1回目のループ
"name" "Catherine"
// 2回目のループ
"age" "20"
// 3回目のループ
"hobby" "reading"
どんなときに使う?
keyによって処理を変えたい時などに使用します。
今回は、keyが”name”
のときは「さん」を付けて、”age”
のときは「歳」を付けてみます!
foreach ($user as $item => $value) {
// $itemがnameの時、$valueに「さん」を付けます
if ($item === 'name') {
$user[$item] = $value . 'さん';
}
// $itemがageの時、$valueに「歳」を付けます
if ($item === 'age') {
$user[$item] = $value . '歳';
}
}
dd($user);
処理の結果
array:3 [
"name" => "Catherineさん"
"age" => "20歳"
"hobby" => "reading"
]
解説
1回目のループでは$itemに"name"
、 $valueに"Catherine"
が渡されます。
3行目のif ($item === ‘name’)の条件に当てはまるので、$user[‘name’] に "Catherineさん"
が代入されます。
2回目のループでは$itemに"age"
、 $valueに20
が渡されます。
8行目のif ($item === ‘age’)の条件に当てはまるので、$user[‘age’] に "20歳
"
が代入されます。
3回目のループでは$itemに"hobby"
、 $valueに"reading"
が渡されます。
3行目のif ($item === ‘name’)と8行目のif ($item === ‘age’)どちらの条件にも当てはまらないので、$user[‘hobby’] はそのままとなります。
まとめ
foreach ($array as $key => $value)はforeach()
の処理の中で連想配列のkeyとvalueどちらも必要な場合に使用します。
使用する場面は、連想配列のkeyによってvalueの処理を変えたい場合などがあります。
例えば
ユーザーの名前には「さん」を、年齢には「歳」を追加したい時です。
この記事で少しでもPHPのforeach()の理解が深まればと思います。
ありがとうございました!