PHPのforeachの使い方を学ぼう!基本構文をわかりやすく解説
PHPのforeach構文は、配列やオブジェクトの要素を簡単に処理できる機能です。
本記事では、foreachの基本的な構文から、キーと値の取得方法、break文やcontinue文の使い方、リファレンスの使い方など、実践的な使用法を詳しく解説します。
また、whileやfor文との違いも比較し、それぞれの特徴や適した使用場面を紹介します。
ぜひforeach活用の参考にしてください。
Contents
PHPのforeachとは?
PHPのforeachは、配列やオブジェクトの要素を簡単に繰り返し処理できる制御構造です。
foreachを使うと、配列の各要素を漏れなく処理できます。
例えば、商品リストを表示する、記事の一覧を表示するなどWEBページの制作と相性が良く、PHPでは多用される機能です。
foreachでできること
foreachは、配列の要素やオブジェクトのプロパティを順番に取り出し、指定した変数に代入しながら処理できます。
foreachの機能を具体的に見ていきましょう。
配列のキーと値へのアクセス
foreachは連想配列のキーと値の両方にアクセスできます。
例えば、ユーザー情報の連想配列があり、キーと値の両方を表示する例です。
$user = [‘name’ => ‘山田太郎’, ‘age’ => 30, ‘city’ => ‘東京’];
foreach ($user as $key => $value) {
echo $key . ‘: ‘ . $value . “\n“; // 出力: name: 山田太郎、age: 30、ctiy:東京
}
オブジェクトのプロパティの反復
foreachはオブジェクトのpublicプロパティに対しても、同じ処理を適用できます。
class Person {
public $name, $age;
public function __construct($name, $age) {
list($this->name, $this->age) = [$name, $age];
}
}
$person = new Person(‘田中’, 30);
foreach ($person as $key => $value) {
echo “$key: $value\n“;
} // 出力: name: 田中、age: 30
配列の各要素を書き換える
例えば、数値の配列があり、各要素を2倍にしたい場合を考えます。
$numbers = [1, 2, 3, 4, 5];
foreach ($numbers as $number) { $number *= 2; } // NG例
print_r($numbers); // numbers配列の要素は変更されていない
// 出力: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
foreach ($numbers as &$number) { $number *= 2; } // OK例
print_r($numbers); // numbers配列の要素が変更されている
// 出力: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )
NG例のように、通常は、ループ内の変数に対する変更が元の配列へ反映されません。
そこで、&演算子を使うと、ループ内の変数がリファレンス渡しされるため、元の配列の要素を変更できます。
foreachの特徴
foreachは、簡潔で読みやすい構文が特徴で、配列のインデックスを意識せずに、要素を順番に漏れなく処理できます。
他の繰り返し構文との違いを見ていきましょう。
while構文との違い
foreachとwhile構文には、以下のような違いがあります。
違い |
foreach |
while |
初期化・条件設定 |
不要 |
必要 |
汎用性 |
低い |
高い |
可読性 |
高い |
やや低い |
例えば、配列の全要素を出力する場合、foreachとwhileの記述は以下のようになります。
$fruits = [‘apple’, ‘banana’, ‘orange’];
// foreach
foreach ($fruits as $fruit) {
echo $fruit . “\n“;
}
// while
$i = 0;
while ($i < count($fruits)) {
echo $fruits[$i] . “\n“;
$i++;
}
使用場面として、foreachは配列やオブジェクトの全要素を処理したいとき、whileはあらかじめ要素数が決まっていないなど条件に応じて処理したいときに適します。
for構文との違い
foreachとfor構文の主な違いは以下のとおりです。
違い |
foreach |
for |
インデックスの扱い |
自動的に要素を取得 |
明示的に指定が必要 |
汎用性 |
低い |
高い |
簡潔さ |
簡潔 |
やや複雑 |
配列の要素を出力する例で比較すると、以下のようになります。
$fruits = [‘apple’, ‘banana’, ‘orange’];
// foreach
foreach ($fruits as $fruit) {
echo $fruit . “\n“;
}
// for
for ($i = 0; $i < count($fruits); $i++) {
echo $fruits[$i] . “\n“;
}
使用場面として、foreachは全要素を確実にたどりたい場合、forは一部要素に限定する場合や、ループ回数が明確な場合に適します。
foreachの書き方と使い方について
PHPのforeachは、配列やオブジェクトの要素を簡単に繰り返し処理できる制御構造です。for文に比べて、より直感的に配列の要素にアクセスできます。
ケース別に、foreachの書き方を見ていきましょう。
基本構文の書き方
foreachの基本的な構文は以下の2つです。
値のみを取得する場合
foreach ($array as $value) {
// $valueを使った処理
}
キーと値の両方を取得する場合
foreach ($array as $key => $value) {
// $keyと$valueを使った処理
}
基本構文の使用例
基本構文を使い、人物の配列$personを表示する例です。
$person = [
‘name’ => ‘John’,
‘age’ => 30,
‘occupation’ => ‘Engineer’
];
echo “// 値のみを取得する場合:\n“;
foreach ($person as $value) {
echo $value . ” “;
}
echo “\n“;
echo “// キーと値の両方を取得する場合:\n“;
foreach ($person as $key => $value) {
echo “$key: $value\n“;
}
上記コードの実行結果は以下のようになります。
// 値のみを取得する場合:
John 30 Engineer
// キーと値の両方を取得する場合:
name: John
age: 30
occupation: Engineer
break文の書き方
break文を使うと、特定の条件でループを途中で終了できます。
$fruits = [‘apple’, ‘banana’, ‘orange’, ‘grape’];
foreach ($fruits as $fruit) {
if ($fruit === ‘orange’) {
echo “オレンジを発見!”;
break;
}
echo $fruit . “\n“;
} // 出力:apple、banana、オレンジを発見!
上記の例では、’orange’が見つかった時点でループが終了します。
continue文の書き方
continue文を使うと、ループの途中で次の繰り返しに進むことができます。特定の条件の要素をスキップしたい場合に役立ちます。
$fruits = [‘apple’, ‘banana’, ‘orange’, ‘grape’];
foreach ($fruits as $fruit) {
if ($fruit === ‘banana’) {
continue;
}
echo $fruit . “\n“;
} // 出力:apple、orange、grape
上記の例では、’banana’がスキップされ、他の果物だけが出力されます。
HTMLでの使い方
foreachはHTMLと組み合わせて使うことで、動的なWEBページの作成に役立ちます。
例えば、商品リストを表示する例です。
<ul>
<?php
$products = [‘PC’, ‘Smartphone’, ‘Tablet’];
foreach ($products as $product) {
echo “<li>$product</li>”;
}
?>
</ul>
PHPでは波括弧{}とは別の構文foreach……endforeachも利用できます。
<ul>
<?php
$products = [‘PC’, ‘Smartphone’, ‘Tablet’];
foreach ($products as $product): ?>
<li><?php echo $product; ?></li>
<?php endforeach; ?>
</ul>
foreachを使うと、配列の内容が変更されても自動的にリスト表示が更新されるため、動的に表示内容を変更する用途に適します。
まとめ
foreachはPHPで頻繁に使用される構文で、配列処理を簡潔におこなえます。whileやfor文と比べて可読性が高く、全要素の処理に適しています。
連想配列やオブジェクトの処理、HTMLとの組み合わせなど、幅広い用途があります。
foreachを使いこなして、コードの質を向上させましょう。