icon
icon

PHPでforeach文を使う方法【初心者向け】

プログラミング初心者向けに、【PHPでforeach文】を使う方法を解説した記事です。foreach文は、配列の要素がある分だけ繰り返し処理することができます。連想配列でも使うことができるので、サンプルコードをもとに紹介。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

プログラミング初心者向けに、PHPの基礎を紹介する記事です。

この記事ではPHPにおけるforeach文とその使い方、途中で処理をスキップする方法を学んでいきます。

 

また、PHPの実行結果をブラウザで表示するためにWebサーバ上にPHPファイルを置いて実行しています。

開発環境はXAMPPを使っていますが、他のWebサーバでも下記のコードの動作確認は可能です。

 

目次

 

foreach文とは

配列は一連のまとまったデータを扱うのに便利な変数です。

その配列の要素をまとめて処理したいときに使われるのがPHPforeach文です。

ほかにも while文for文などがありますが、foreach文がより簡潔に記述できます。

foreach文では配列の各要素に繰り返し(ループ)処理を実行しますが、while文やfor文のように、繰り返しを終了する条件を記述する必要はありません。

なぜなら、配列の要素がある分だけ繰り返し処理したらループを抜けるためです。

 

大石ゆかり

for文やwhile文の他にforeach文もあるんですねー。

田島悠介

配列や連想配列を展開したいときや、配列などの値を変更する必要がない場合に便利なんだ。

大石ゆかり

連想配列にも使えるんですか?配列のように添え字が数字じゃないですよね?

田島悠介

その通り!それでも、順番に展開してくれるんだ。では、foreach文を実際に書いてみよう!

 

[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは

foreach文を書いてみよう

foreachは、次のように書くことができます。

foreach文の書式1

<?php

foreach ( <配列の変数> as <各要素が格納される変数> ) {

// ループ処理をここへ記述

}
?>

 

PHPで配列を使う方法を参考に、実際に書いてみましょう。

たとえば $fruits という変数を作り、これを配列にします。

<?php
$fruits = [ “りんご”, “オレンジ”, “ぶどう” ];
foreach ( $fruits as $fruit ) {

print $fruit. “<br>”;

}
?>

 

これをWebサーバ上で実行すると次のような画面が出力されます。

りんごオレンジぶどう

りんご、オレンジ、ぶどうと、$fruits 配列に含まれていた3つの要素に対して繰り返し処理(printで出力)を実行できました。

これが foreach の基本的な使い方です。

 

連想配列でも使える

ここまでは単純な配列を扱いましたが、PHPの連想配列でも同じようにforeach文で処理できます。

今回は要素のキーの値も取り出しています。

foreach文の書式2

// 配列要素のキーと値のペアを取り出すとき

foreach (<配列の変数> as <各要素のキーが格納される変数> => <各要素が格納される変数> ) {

// ループ処理をここへ記述

}

 

同じように $fruits 配列を使いますが、それぞれの要素がキーと値のペアを持っています。

<?php
$fruits = [ “apple” => “りんご” , ”orange” => “オレンジ”, ”grape” => “ぶどう” ];
foreach($fruit as $key => $value){

print $value . ”は英語で書くと” . $key . “です<br>”;

}
?>

 

Webサーバ上実行してみましょう。

以下のような結果が表示されます。

appleはりんごです

このように連想配列も同じようにforeach文で扱うことができました。

 

途中で処理をスキップ

配列の繰り返し処理の途中で処理を抜けたり、その回だけ飛ばしたりしたい時があります。

例えば、配列の中の特定の要素を探す場合、該当する要素が見つかったらそれ以降は、繰り返し処理は必要ありません。

このような時に役に立つのが、continue文break文です。

 

continue文とbreak文

continue文は、その回の処理をスキップして、次の繰り返し処理から続行します。

break文は、foreach文自体を抜けます。

文章だと分かりづらいかもしれませんので、以下のコードで説明します。

 

continue文を使った場合

foreach ( $fruits as $fruit  ) {

//  処理1

contiue;

// 処理2

}

上のコードで、繰り返し処理中contiue文が実行されると、処理2がスキップされて、次の繰り返し処理に移ります。

 

break文を使った場合

foreach ( $fruits as $fruit  ) {

//  処理1

break;

// 処理2

}

// 処理3

上のコードで、繰り返し処理中break文が実行されると、foreach文の繰り返し処理はその時点で終了し、foreach文を抜けた先の処理3が実行されます。

 

foreachでリンクリストを作成

最後にforeach文が実際に使われる例として、リンクのリストを表示するページを作成しましょう。

ここでは、画面の体裁を整えるために Bootstrap4を使用しています。

以下のコードを実際に書いて試してみましょう。

<?php
    $linkItems = [
        ‘https://www.yahoo.co.jp’ => ‘Yahoo’,
        ‘https://www.msn.com/ja-jp’ => ‘MSN’,
        ‘https://www.google.co.jp’ => ‘Google’,
    ];
?>
<!DOCTYPE html>
<html lang=”ja”>
<head>
    <meta charset=”UTF-8″>
    <meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
    <title>Foreach文によるメニュー</title>
    <!– Bootstrap CSS –>
    <link rel=”stylesheet” href=”https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css”>
</head>
<body>
    <div class=”container”>
        <ul class=”list-group mt-5 w-50 mx-auto”>
            <?php foreach ($linkItems as $url => $text): ?>
            <li class=”list-group-item”><a href=”<?=$url ?>”><?=$text ?></a></li>
            <?php endforeach; ?>
        </ul>
    </div>
</body>

</html>

 

コードの説明

ページの先頭で、$linkItemsという連想配列を用意していますが、その要素として、キーの値に外部サイトへのURLを、要素の値にリンク名を指定しています。

body内の ulタグが、リンクのリストの要素になりますが、ここでforeachを使って、$linkItemsの各要素に対して以下の繰り返し処理を実行します。

  • 各要素のURLとリンク名を取り出し、それぞれ$url $text 変数に格納
  • $url をリンク先に、$textを表示文字列にしたリンクタグ(a)を作成して、これをli要素の内側に配置

このようにして、リンクの情報を格納した連想配列から実際にリンクのリストを作成できました。

コードを実行した結果

リンクのリスト

 

おわりに

この記事では、foreach文についてコードを書きながら使い方を分かりやすく説明しました。

foreach文は、PHPで配列の要素を処理する際には頻繁に使われる制御構文ですので、これを機会に使いこなせるようにしておくと良いでしょう。

 

執筆してくれたメンター

メンター安野(やすの)

Webアプリケーションエンジニアとして長年健診業界で業務システムの開発に従事してきました。
テックアカデミーではPHP/Laravelコースを担当しています。
開発実績: 健康診断システム、電話予約システム、検査管理システム、各種データ処理ツール

 

大石ゆかり

連想配列は何が入っているのかわからないので、順番に名前と値を取得できるのは便利ですね。

田島悠介

そうそう。あと、foreach文のほうが少し速かったりもするんだ。

大石ゆかり

では、配列や連想配列の単純な展開では、foreach文がいいんですね。

田島悠介

その通り!繰り返し文だけで何個もあるけど、他のプログラミング言語でも使うので、がんばって覚えよう!

 

テックアカデミーでは、初心者でもPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。