- 更新日: 2019年04月19日
- 公開日: 2018年03月26日
【初心者向け】PHPのforeach構文の使い方をマスターしよう!
PHPをコーディングしていると、配列の要素に対して反復して処理をしたいことがあります。例えば、配列の各要素に氏名が格納されており、末尾に「様」をつけたいときはどうするでしょうか。foreach構文を使用すれば簡単に実現できます。今回はforeach構文についてご紹介します。
【初心者向け】PHPのforeach構文の使い方をマスターしよう!
(当記事はPHP7.1にて検証しています。)
foreach構文について
foreach構文は、配列やオブジェクトを反復処理するための便利な制御構造です。一般的には「フォーイーチ」と読みます。他のプログラミング言語の経験がある人なら使い方は感覚で掴めるでしょう。foreach構文を使うときは、配列の全ての要素に特定の同様の処理を行いたいときです。
foreach構文の使い方
foreach構文は、2種類の構文があります。正確な表現をするため「反復したデータ構造」と書いていますが、この記事では配列と置き換えて考えてください。
- foreach (反復可能なデータ構造 as 要素)
- foreach (反復可能なデータ構造 as キー => 要素)
foreach (反復可能なデータ構造 as 要素)
最初に「foreach (反復可能なデータ構造 as 要素)」のソースコードを説明します。
<?php
$array = [1, 2, 3, 4, 5];
foreach ($array as $value) {
echo $value . "</br>";
}
?>
出力結果
配列に1から5までの数字を格納しています。その配列を、先頭から要素の最後にたどり着くまでforeachブロックの中を繰り返し処理します。各繰り返し処理置いて、現在の要素の値は、$valueに格納されています。
foreach (反復可能なデータ構造 as キー => 要素)
次に「foreach (反復可能なデータ構造 as キー => 要素)」のソースコードを説明します。
<?php
$vegetabels_color = [
'tomato' => 'red',
'lettuce' => 'green',
'potato' => 'brown'
];
foreach ($vegetabels_color as $name => $color) {
echo "$name の色は $color です" . "</br>";
}
echo "最後の野菜は $name であり、色は $color です" . "</br>";
?>
出力結果
キーを野菜の名前、要素を野菜の色にした連想配列を定義します。foreachのasの後に「キー => 要素」の変数名を定義すれば、キーと要素を同時にブロック内でしようすることができます。なお、PHPにはブロックスコープがないので、$nameやVcolorはforeachブロックを抜けた後でも値が格納されたままです。他の言語からPHPにくると間違えやすいので注意しましょう。
break構文
break構文は、foreachブロックから抜けることができます。break構文は、foreachのみならず、forやwhileなどでも使用できます。
サンプルコード
<?php
// 本来は$diceをシャッフルする。
$dice = [2, 5, 6, 1, 3, 4];
foreach ($dice as $value) {
echo "出た目は $value です" . "</br>";
if ($value === 6) {
echo "6 が出たので、終了します。" . "</br>";
break;
}
}
?>
出力結果
上のソースコードでは、1から6の目が出るサイコロ($dice)を振って、6が出たらforeachを強制的に終了させています。
continue構文
continue構文は、現在の繰り返し処理を途中で終了し、次の繰り返しをする場合に使用されます。continue構文も、foreachのみならず、forやwhileなどでも使用できます。
サンプルコード
<?php
// 本来は$diceをシャッフルする。
$dice = [2, 5, 6, 1, 3, 4];
foreach ($dice as $value) {
//
if ($value % 2 !== 0) {
continue;
}
echo "出た目は $value です" . "</br>";
}
?>
出力結果
上のソースコードでは、1から6の目が出るサイコロ($dice)を振って、奇数のみ出力しています。
while構文やfor構文との違い
PHPには、foreach構文と似た動きをするwhile構文やfor構文があります。
foreach構文をwhile構文やfor構文に書き換えてみましょう。
サンプルソース
<?php
$array = [1, 2, 3, 4];
echo "while構文</br>";
$key = 0;
while ($key < count($array)) {
echo $array[$key] . "</br>";
$key++;
}
echo "for構文</br>";
for ($key = 0; $key < count($array); $key++) {
echo $array[$key] . "</br>";
}
echo "foreach構文</br>";
foreach ($array as $key => $value) {
echo $value . "</br>";
}
?>
出力結果
サンプルソースは、$arrayの要素の1から4までの配列を各繰り返しの構文を用いて出力しています。while構文やfor構文だと、配列の要素数をcount()関数で取得しなければなりません。さらに、while構文だけは、添字のインデックス($key)をwhileブロックの外で定義しなければなりません。このことから、配列の全ての要素に効率よく反復処理を実施するのにはforeach構文が望ましいでしょう。
\Webサイト担当者としてのスキルが身に付く/
まとめ
各繰り返しの構文の特徴をまとめると以下のようになります。繰り返し処理を行うときの参考にしてください。
構文 | 処理に適している条件 | 特徴 |
---|---|---|
foreahc構文 | 配列の全ての要素に対して繰り返し処理を行いたい。 | 条件式を意識しなくても繰り返し処理ができる。 |
while構文 | 指定した条件の間は、繰り返し処理を行いたい。 | 条件式のみで繰り返しができるので、フラグで繰り返し処理を管理する場合は向いている。 |
for構文 | 初期値式、条件式、増減式に基づき繰り返し処理を行いたい。 | 繰り返しの条件を1行で定義できるので、可読性が高い。配列を使わない繰り返し処理に向いている。 |
ここまでforeach構文を中心に繰り返し処理をみてきましたが、それぞれ得意なことが違います。目的に合った構文を使えるようになることがPHPの上達のコツです。繰り返し処理はプログラム初心者がつまずきやすい箇所なので、最初は画面に要素やキーを出力しながらデバッグを行うとわかりやすいです。
参考文献
「パーフェクトPHP」小川雄大、柄沢聡太郎、橋口誠、著、技術評論社、2010
「PHP逆引きレシピ 第二版」鈴木憲治、山田 直明、山本義之、浅野仁、櫻井 雄大、安藤建一、著、翔泳社、2013
- この記事を書いた人
- 山川竜太郎