この記事では、PHPで繰り返し処理(ループ)をする時に使用するforeach文について書いています。
最初に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入門記事もありますので、合わせてご確認ください。
コメント