オレンジのブログ
読書と運動で人生を変えよう
パソコンシリーズ

【PHP】foreach ($array as $key => $value)を解説

お久しぶりです!

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()の処理の中で連想配列のkeyvalueどちらも取れます!

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"、 $value20が渡されます。
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()の理解が深まればと思います。
ありがとうございました!

オレンジ
オレンジ
私もブログを書くことによって勉強になったので良かったです!