IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

PHPのforeachの使い方を学ぼう!基本構文をわかりやすく解説

PHPのforeach構文は、配列やオブジェクトの要素を簡単に処理できる機能です。

本記事では、foreachの基本的な構文から、キーと値の取得方法、break文やcontinue文の使い方、リファレンスの使い方など、実践的な使用法を詳しく解説します。

また、whileやfor文との違いも比較し、それぞれの特徴や適した使用場面を紹介します。

ぜひforeach活用の参考にしてください。

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を使いこなして、コードの質を向上させましょう。