今回はPHPのforeach文の使い方を初心者にも分かりやすく解説します。
プログラムの処理として基本的なものの一つとしてループ処理があります。
大量のデータを扱うことが多いプログラミングにおいてループ(繰り返し)処理は超重要項目ですね。
そして、foreach文は配列をループさせるのに特化した書き方なので、汎用性も高い構文になります。
foreach文とは
PHPのforeach文は、配列の要素の数だけ繰り返し処理を実行することができる便利な構文です。
「配列」とは、例えば
['あ','い','う','え','お']
のように、複数の値を順序づけてまとめることができる変数のことです。
foreach文は配列に対して使うことができ、配列の中の要素の数分だけ、繰り返し処理を実行できる便利な書き方なので、汎用性が高く、様々な処理の中で頻出の構文となっているかと思います。
上記のような「あいうえお」という配列を対象にforeachループを実行した場合、要素の数だけ処理がループするので、5回分のループ処理が実行されることになります。
foreach文の書き方
それでは実際にforeach文の書き方をみていきましょう。
foreach文の書き方は主に2つのパターンがあります。
foreach文の基本的な形とループ内で各要素のキーを使用する形の2つです。
基本の構文
基本的なforeach文の記述方法は以下の通りとなります。
foreach ($array as $value) {
// 処理
}
上記の例では$arrayという配列を対象にループ処理を実行し、ループ内の現在の要素が$valueに代入されます。
そのため、ループ処理内で$valueを利用し、何かしらの処理を実行することで、$arrayの各要素に対して順番に処理を行えるということになります。
配列のキーを使用する場合
次の書き方が配列の各要素のキーを使用する場合の書き方になります。
foreach ($array as $key => $value) {
// 処理
}
$valueに現在の配列の要素が代入されるのは、基本の形の処理と同様ですが、上の例だと$keyに現在の要素のキーが代入されます。
配列のキーは、特に指定がない場合、0から順番に数値が割り振られます。
ループ処理の中でキーの値を使用する場合はこちらの記述方法を使用すると良いでしょう。
ループ処理を抜ける方法「中断」と「スキップ」
foreach文を実行すると、配列の要素の数分のループ処理が実行されますが、その処理の途中で「処理を中断」させたり、「処理をスキップ」させたりすることも可能です。
「処理の中断」と「処理のスキップ」はそれぞれ、
- 処理を中断する場合は「break」
- 処理をスキップする場合は「continue」
という記述を使用します。
breakやcontinueは、for文やwhile文などのforeach以外のループ処理の中でも使用することができます。
処理の中断「break」
ループの途中で”ループ処理自体”を終わらせる場合は、「break」を使用します。
実際に使用する場合は以下のようになります。
foreach ($array as $value) {
// 処理
// 何かしらの条件
if ($value == '終了条件') {
break;
}
}
ifで終了条件を判定させて、$valueが「終了条件」だった場合にループ処理を終了するという処理になります。
特定の値でループを終わらせたい場合に使用することで、無駄なループ処理を実行することなく次の処理に進めることができます。
処理をスキップ「continue」
次に処理のスキップをする「continue」を見ていきましょう。
breakと同じようにif分岐で処理スキップを実施する例は以下のようになります。
foreach ($array as $value) {
// 何かしらの条件
if ($value == 'スキップ条件') {
continue;
}
// 処理
}
この場合は、ループ内の処理の冒頭でスキップするかどうかの分岐を行い、特定の条件(上記の例だと$value == ‘スキップ条件’)の場合には処理をスキップしています。
配列の各要素を対象に処理は実行したいが、特定の条件の要素は例外として何もしない(もしくは別の処理をする)こととする場合に有効となります。
foreach文とfor文の違い
ここまで、foreach文の特徴や書き方をみてきましたが、基本の繰り返し処理であるfor文との違いを確認しましょう。
for文の書き方は以下のような感じでしたね。
// 処理を10回ループする例
for ($i = 1; $i <= 10; $i++) {
// 処理
}
通常のfor文の上記の例を見てみると、$iのようにカウンタを定義したりして、ループの終了条件を明記する必要がありましたね。
そのためfor文でforeach文のように、繰り返しの回数を配列の要素の数とする場合、以下のように記述する必要があります。
// for文で配列の要素の数だけループさせる場合
for ($i = 0; $i < count($array); $i++) {
// 処理
// ループ内で配列の要素を指定する場合は、$array[$i]とする必要がある
}
配列を対象にループ処理を使う場合は、カウンタを0から指定し、配列の要素の数をcount()関数で取得してループの条件として使用することになります。
さらに、ループ内の処理で配列の各要素を使用する場合には、配列のカウンタ番目の値を参照する必要があります。
foreach文を知ってからだとなんかとても面倒に感じてしまいますね。
foreach文のサンプルコード
最後にざっと今まで紹介したforeach文のサンプルコードをご紹介します!
シンプルなforeachループ
配列の「あいうえお」を順番に出力します。
$arr = array("あ", "い", "う", "え", "お");
foreach ($arr as $value) {
print $value;
}
特定の条件で中断するforeachループ
breakを使用して、配列「あいうえお」のループを「う」の処理後に終了します。
$arr = array("あ", "い", "う", "え", "お");
foreach ($arr as $value) {
print $value;
if ($value == "う") {
break;
}
}
特定の条件でスキップするforeachループ
continueを使用して、配列「あいうえお」のループを「う」の時のみスキップします。
$arr = array("あ", "い", "う", "え", "お");
foreach ($arr as $value) {
if ($value == "う") {
continue;
}
print $value;
}
まとめ:PHPのforeach文の使い方から抜ける方法
ここまで、foreach文の使い方をご紹介しましたが、いかがだったでしょうか。
プログラムの処理においてループ処理はかなり使われるものなので、ぜひforeach文もマスターして使いこなせるようになっていってくださいー!
コメント