PHPの繰り返し処理の一つにforeach文があります。
「配列から値を取り出す」「配列キーを変数に格納する」など、配列を扱うときに頻繁に使用するため、PHPでプログラムを書きたい方は覚えておくと便利です。
この記事では、サンプルコードや出力例を示しながら、PHPのforeach文の概要や応用例について解説します。
公開日:2023年3月28日
PHPのforeach文とは?
PHPのforeach文とは、配列に含まれる要素を繰り返し処理で一つ一つ取得したり、逆に配列の値を変数に格納したりする際に使用する構文です。
配列には長さがあり、値の数だけ繰り返し処理を行い、配列内の要素を変数に代入します。ちなみに、配列の要素数は、count関数で取得することが可能です。
foreach文は、配列の値を取り出し、それを変数に代入するだけなので、配列の要素を変更することができません。
具体的に、PHPのforeach文は下記のように記載します。
1 2 3 4 5 6 |
//サンプルコード1 $arr = array("鈴木","高橋","山田"); //配列を定義 foreach($arr as $data){ //foreachで取り出す配列と要素の値を格納する変数を指定する。 print($data); //変数値を表示する($dataは、$arr[x]からコピーしてきたデータが入っている) print("<br>"); //html改行コードを表示をする } |
また、実行結果は下記の通りです。
1 2 3 4 |
//実行結果 鈴木 高橋 山田 |
配列要素分の繰り返し処理を行う
foreachは、配列要素分の繰り返し処理を行います。
上記で示したサンプル例をもとに、ループごとでどのような処理をしているのかについては下記の通りです。
- 配列『arr』の0番目「鈴木」を変数『data』に代入する
- 鈴木が代入された変数『data』を出力する
- HTMLの改行コード<br>を出力
- foreachのブロックの最後に到達したので、foreach文の先頭に戻る
- 配列『arr』の1番目「高橋」を変数『data』に代入する
- 高橋が代入された変数『data』を出力する
- HTMLの改行コード<br>を出力
- foreachのブロックの最後に到達したので、foreach文の先頭に戻る
- 配列『arr』の2番目「山田」を変数『data』に代入する
- 山田が代入された変数『data』を出力する
- HTMLの改行コード<br>を出力
- 配列の要素の長さに到達したので、foreach文の処理から抜ける
for文・while文と違い繰り返しの終了条件がない
PHPの繰り返し処理には、foreachのほかにも、for文やwhile文があります。実際に、for文やwhile文と何が違うのかわからないという方もいるのではないでしょうか?
違いをご説明するために、上記で示したサンプルコードをfor文やwhile文に書き換えてみました。
【for文】
1 2 3 4 5 6 |
$arr = array("鈴木","高橋","山田"); //配列を定義 $arrNum = count($arr);//配列の長さをcount関数で取得 for($i = 0; $i <= $arrNum; $i++){ //繰り返し条件を設定する print($arr[$i]); //i番目の要素にあるarrを出力 print("<br>"); //html改行コードを表示をする } |
【while文】
1 2 3 4 5 6 7 8 9 |
$arr = array("鈴木","高橋","山田"); //配列を定義 $arrNum = count($arr);//配列の長さをcount関数で取得 $i = 0; while($i !== $arrNum){ //繰り返し条件を設定する print($arr[$i]); //i番目の要素にあるarrを出力 print(" "); //html改行コードを表示をする $i++;//ブロック最後の行に到達したら、iに1を加算する } |
foreachとfor文、while文の違いは、繰り返しの終了条件の有無です。
foreach文には繰り返し処理終了の条件がないのに対して、for文やwhile文にはどこまで繰り返すのかが設定されています。 例えば、for文の場合、「$iに格納されている数値が$arraNum未満なら処理を実行する」というイメージです。
一方、foreachは細かな設定はなく、配列の要素の数分の繰り返し処理を行います。そのため、配列のすべての要素に対して処理を実行したいときに有効な構文です。
\文字より動画で学びたいあなたへ/
Udemyで講座を探す >連想配列を使ったforeach文
連想配列の場合は、先程の「仮変数」の代わりに「仮キー変数 => 仮変数値」を指定することで、連想配列のデータから一組のキーと値が取得できるようになります。
1 2 3 4 5 6 7 8 9 10 |
//サンプルコード2 $arr = array("りんご"=>"Apple","バナナ"=>"Banana","もも"=>"Peach"); //連想配列を定義 foreach($arr as $key=>$val){ //foreachで取り出す連想配列の指定と、「仮キー変数 => 仮変数値」を定義します。 print($key." ".$val); //$keyと$valに入ったデータを表示する。 print("<br>");//html改行をする。 } //サンプルコード2の実行結果 りんご Apple バナナ Banana もも Peach |
foreachでは、このように連想配列のkeyとvalueをそれぞれの別の変数に代入することができます。
PHP foreach文の応用例
次に、PHP foreach文の応用例について解説します。
break:繰り返し処理を中断
foreach文の中でif文を使用し条件を設定することで、繰り返し処理を中断できます。具体的なサンプルコードは下記の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//サンプルコード3 $arr = array(); //連想配列を作成する。 $arr["相沢"] = 99; $arr["田中"] = 28; $arr["山田"] = 70; $arr["高橋"] = 33; foreach ($arr as $name =>$point){//foreachで取り出す連想配列の指定と、「仮キー変数 => 仮変数値」を定義します。 if ($point < 40){ //一人でも欠点者がいれば、処理を中断する。 print "残念ながら不合格者がいました"; break;// foreachのループ処理から抜ける。 } } //サンプルコード3の実行結果 残念ながら不合格者がいました |
上記のサンプルコードでは、配列に名前とテストの結果の点数が入った配列を用意し、一人でもテストの点数が40未満の人がいたら処理を中断し、「不合格者がいました」と報告しています。
ちなみに、break文はfor文やwhile文でも使用可能です。
continue:処理をスキップ
continue文は、if文で設定した条件に当てはまる場合、処理をスキップする構文です。continue文は、for文やwhile文はもちろんのこと、foreachでも使用できます。具体的なサンプルコードや出力例は下記の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//サンプルコード4 $arr = array(); //連想配列を作成する。 $arr["相沢"] =39; $arr["田中"] = 98; $arr["山田"]=70; $arr["高橋"]=33; print "テストの不合格者:<br>"; foreach ($arr as $name =>$point){//foreachで取り出す連想配列の指定と、「仮キー変数 => 仮変数値」を定義します。 if ($point >= 40){ //合格者はスキップする continue;//以下の処理はスキップし、次のループ処理を行う。 } print($name.":".$point."点"); print("<br>"); } //サンプルコード4の実行結果 テストの欠点者: 相沢:39点 高橋:33点 |
上記のサンプルコードの場合、$pointに40以上の数値が格納されている場合、foreachの処理をスキップします。それ以下の数値の場合、名前や点数が出力されるというコードです。
配列の要素を書き換える
通常、foreachを使用する場合、要素の中身を書き換えることはできません。しかし、参照渡しをすることで、配列の要素に直接アクセスすることができます。参照渡しは、下記のように『&』を使用するのが一般的です。
1 |
foreach(配列 as &変数) |
早速、下記にサンプルコードを記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//サンプルコード $arr = array(1,2,3); //配列を定義 foreach($arr as &$data){ //foreachで取り出す配列と要素の値を格納する変数を指定する。 $data += 1; //$arrの値を書き換える } print_r($arr) //配列を出力 //実行結果 // Array // ( // [0] => 2 // [1] => 3 // [2] => 4 // ) |
PHPでforeach文を使った処理を書いてみよう
PHPのforeachで連想配列やbreak文、continue文を学びました。それでは、最後にこれらを使用したサンプルコードを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$arr = array(1,2,3,4,5,6,7,8,9,10); foreach($arr as &$data){ if($data == 5) continue; if($data == 9) break; $data += 1; print($data); print(" "); } //出力結果 2 3 4 5 7 8 9 |
1~10までの数値が格納されている配列を用意し、foreach文を使いその数値に1をプラスした値が出力されます。しかし、数値が5のときはbreak文で処理をスキップし、数値が9のときに処理を終了するようにしました。
まとめ
今回は、PHPのforeach文をサンプルコード付きで詳しく解説しました。
foreachは繰り返し処理終了条件を入れる必要がないため、非常にシンプルなコードでループ処理を実現することができます。 また、break文やcontinue文も使用できるため、格納された変数によって処理実行の有無や中断を決めることが可能です。さらに、参照渡しをすれば、配列の要素に直接アクセスすることもできます。
foreach文を覚えることでPHPプログラミングの理解が一層深まるため、この機会に習得してみてはいかがでしょうか?
PHPからLaravelまで サーバーサイドをとことんやってみよう【初心者から脱初心者へ】【わかりやすさ最重視】
PHP初歩からLaravelまでをつなぐように知識を網羅しています。連想配列や関数からフォーム(HTTP)/セキュリティ/PDO/クラスなど。composer/名前空間などを使った現代的な開発方法を体験することができます。
\無料でプレビューをチェック!/
講座を見てみる評価:★★★★★
ララベルの学習にあたっていろいろなサイトや動画や見漁ったのですが、このUdemy講座が一番わかりやすかったです!!!
評価:★★★★★
初学者ですがとてもわかりやすいです。
コードが何を書いているのか、感覚をつかめる感じです。
初学者だからこそ細かく理解する必要があまりないんだな〜と思いました。
最新情報・キャンペーン情報発信中