【作って納得!PHP入門】foreach文を使ってみよう(繰り返し処理)

PHP

前回はfor文について記載しました。

今回は繰り返し処理(ループ)のforeach文について見ていきます。

最初にforeach文についての説明をします。
その後に、実際に簡単なプログラムを作成して、foreach文について学んでいきます。

この記事の目標(作るもの)について

foreach文を使用した簡単なプログラムを作成し、下記のように画面に結果を出力して確認します。

PHPのforeach文とは?

PHPのfor文と同じようにループ処理をしますが、foreach文は配列の要素数で、繰り返し処理(ループ)するために使用します。

for文はカウンタが必要でしたが、foreach文には配列のみを渡します。
そして、配列全件の要素数分ループして処理することができます。

foreachの基本的な書き方

実際の構文としては、このようになります。

foreach (配列 as 値) {
  // .....繰り返す処理を書く.....
}

[配列]の箇所に配列を渡します。
[値]には配列の中身を1件ずつ、受け取る変数を用意します。

foreach文はループを回るたびに、[値]の箇所に配列の値が格納されます。
全ての配列の値を取り出し終わったらループを抜けます。

実際の例で書くと下記のようになります。

$userNames = ["taro", "hanako", "jiro"];
foreach ($userNames as $userName) {
    echo "{$userName}です。"; // 結果は"taroです。hanakoです。jiroです。"と出力される
}

上記コードでは、用意されているユーザー名の数分ループされます。(3回)
そして、$userNameを出力しているので、結果は「taroです。hanakoです。jiroです。」になります。

foreach文でキーも使いたい

また、foreach文の別の書き方として、下記のように書くこともできます。

foreach (配列 as キー => 値) {
  // .....繰り返す処理を書く.....
}

[配列]と[値]の扱いは上記で記載したものと同じです。
配列を渡すと、[値]にひとつずつ値を格納して、ループ処理をします。

[キー]が追加されていますが、これは配列のキーになります。

実際の例で書くと下記のようになります。

$userNames = ["taro", "hanako", "jiro"];
foreach ($userNames as $key => $userName) {
    echo "{$key}. {$userName}です。"; // 結果は"0. taroです。1. hanakoです。2. jiroです。"と出力される
}

上記のコードは、先ほどの例に$keyを含めただけです。
$keyには配列の添字(キー)が入ってきます。

配列は0番目からなので、ループが回るたびに“0, 1, 2”となります。
ユーザー名の数分ループして、3回まわります。
キーも出力するようにしているので、結果は「0. taroです。1. hanakoです。2. jiroです。」になります。

それでは、実際にコードを書いて、確認していきましょう。

PHPでforeach文を使ってみよう

実際にforeach文を使用して、処理を書いてみましょう。
前回作成したcodelike_web_dockerの配下に、foods_foreach.phpという名前で下記の内容で保存します。

<?php
echo "foreach test1<br />";

$foods = ["ラーメン", "すし", "ピザ", "ハンバーガー"];
foreach ($foods as $food) {
    echo "好きな食べ物は{$food}です。<br />";
}

echo "<br />foreach test2<br />";
$foods = ["ramen" => "ラーメン", "sushi" => "すし", "pizza" => "ピザ", "hamburger" => "ハンバーガー"];

foreach ($foods as $key => $food) {
    echo "英語で{$key}は日本の{$food}です。<br />";
}

解説

値だけ取得してループする

最初に$foodsの配列を用意しています。これは食べ物の名前が入った配列です。

$foods = ["ラーメン", "すし", "ピザ", "ハンバーガー"];

その後にforeachが登場しています。

$foodsに入っている要素数の間ループします。

foreach ($foods as $food) {
    echo "好きな食べ物は{$food}です。<br />";
}

ループ毎に$foodには食べ物の名前が配列の0番目から順番に取り出されます。
なので、ここでの出力は「好きな食べ物はラーメンです。[改行]好きな食べ物はすしです。[改行]…」となります。

キーと値を取得してループする

次は$foodsの連想配列を用意しました。

$foods = ["ramen" => "ラーメン", "sushi" => "すし", "pizza" => "ピザ", "hamburger" => "ハンバーガー"];

「英語の食べ物名」がキーになって、値が「日本語の食べ物名」になります。

連想配列の内容を、このように出力してみました。

foreach ($foods as $key => $food) {
    echo "英語で{$key}は日本の{$food}です。<br />";
}

連想配列を渡した場合も、連想配列の先頭からループが開始します。
$keyには連想配列のキーが格納されます。$foodは連想配列の値になりますね。

ここでの出力は「英語でramenは日本のラーメンです。[改行]英語でsushiは日本のすしです。[改行]…」となります。

動作確認

想定通りの結果が出力されているか確認してみましょう。前回作成した環境を立ち上げます。
foods_foreach.phpの編集が終わったら、保存して下記にアクセスします。

http://localhost:8080/foods_foreach.php

想定した結果が返ってきました!

for文とforeach文どちらを使用するか

今回はforeach文を使っていきました。
foreach文は配列の要素数の全件でループしてくれました。

配列全件をループして、処理したい場合はforeach文を使ったほうが良いです。
理由としては2点あります。
・カウンタを使用しないので、バグ発生の要因になりにくい
・foreach文が使ってあることで、コードを読み解きやすくなる(全件回すのか…と予想できるため)

おわりに

今回はforeach文を見ていきました。

配列の全件を回すような処理は、カウンタを気にしなくていいforeach文を使うようにしていきましょう。

その他のPHP入門のオススメ記事

そのほかに、このブログで書いているオススメ記事をご紹介します。

while文を使ってみよう

次回は作った環境を使用して、PHPのwhile文を使ってみましょう。

PHP入門の記事一覧に戻る

他のPHP入門記事もありますので、合わせてご確認ください。

参考

公式ドキュメント – foreach
PHP: foreach - Manual

コメント

タイトルとURLをコピーしました