php

「foreachって何してるの?」PHPの配列を1件ずつ取り出してみよう

前回、PHPの「配列」を勉強しました。

例えば、こんな配列です。

$users = [
    [
        'name' => 'みのり',
        'age' => 18
    ],
    [
        'name' => '田中',
        'age' => 25
    ],
    [
        'name' => '佐藤',
        'age' => 32
    ]
];

3人分のデータが $users に入っています。

では、全員の名前を画面に表示したいとします。

前回の知識だけでもできます。

echo $users[0]['name'];
echo $users[1]['name'];
echo $users[2]['name'];

これで、

みのり
田中
佐藤

を取り出せます。

でも……

100人いたらどうするのでしょう?

echo $users[0]['name'];
echo $users[1]['name'];
echo $users[2]['name'];
echo $users[3]['name'];
echo $users[4]['name'];

// まだまだ続く……

これは大変です。

そこで登場するのが、

foreach

です。


1.foreachは「順番に1個ずつ見ていく」

まずはコードを見てみましょう。

foreach ($users as $user) {
    echo $user['name'];
}

初めて見ると、

なんだこの英文は。

と思うかもしれません。

でも、やっていることはかなり単純です。

イメージとしては、

$users に入っているデータを

↓ 1件取り出す

$user

↓ 次の1件を取り出す

$user

↓ また次の1件を取り出す

$user

という処理です。

つまり、

「$usersの中身を1件ずつ$userとして処理する」

と考えればOKです。


2.foreach ($users as $user)を分解してみる

この部分を見てみましょう。

foreach ($users as $user)

3つに分けると分かりやすくなります。

foreach
↓
順番に処理する

$users
↓
元になる配列

as $user
↓
取り出した1件を入れる変数

日本語っぽく読むなら、

$users の中身を、1件ずつ $user として処理する

です。

英語の as も、

「〜として」

くらいに考えると分かりやすいでしょう。


3.実際には何が起きている?

もう一度、この配列を使います。

$users = [
    [
        'name' => 'みのり',
        'age' => 18
    ],
    [
        'name' => '田中',
        'age' => 25
    ],
    [
        'name' => '佐藤',
        'age' => 32
    ]
];

そして、

foreach ($users as $user) {
    echo $user['name'];
}

を実行します。

最初の処理では、

$user = [
    'name' => 'みのり',
    'age' => 18
];

のような状態になります。

だから、

$user['name']

は、

みのり

です。

次の処理では、

$user = [
    'name' => '田中',
    'age' => 25
];

になります。

だから、

$user['name']

は、

田中

になります。

そして最後に、

佐藤

が取り出されます。

つまりPHPが自動的に、

1件目 → 2件目 → 3件目

と進めてくれているわけです。


4.100件あってもコードは同じ

ここが foreach の便利なところです。

3件でも、

foreach ($users as $user) {
    echo $user['name'];
}

です。

100件でも、

foreach ($users as $user) {
    echo $user['name'];
}

です。

1000件でも基本的な書き方は変わりません。

配列の件数に合わせて、PHPが繰り返してくれます。


5.HTMLと組み合わせると一気に「Web制作」っぽくなる

例えば、ユーザー一覧を作ってみましょう。

$users = [
    [
        'name' => 'みのり',
        'age' => 18
    ],
    [
        'name' => '田中',
        'age' => 25
    ],
    [
        'name' => '佐藤',
        'age' => 32
    ]
];

これをHTMLのリストにします。

<ul>

<?php foreach ($users as $user): ?>

    <li>
        <?= htmlspecialchars($user['name'], ENT_QUOTES, 'UTF-8') ?>
    </li>

<?php endforeach; ?>

</ul>

急に難しく見えましたね。

でも、やっていることは同じです。

foreach ($users as $user)

で1人ずつ取り出して、

$user['name']

を表示しています。

結果は、

・みのり
・田中
・佐藤

のようになります。


6.endforeachって何?

先ほど、

<?php foreach ($users as $user): ?>

という書き方をしました。

最後には、

<?php endforeach; ?>

があります。

これは、

foreach ($users as $user) {

}

と基本的には同じです。

HTMLの中にPHPを書くときは、

foreach (...):

から、

endforeach;

までが繰り返す範囲だと分かりやすいため、この書き方を見かけることがあります。

WordPressのテーマなどを触っていると遭遇する可能性もあります。

AIが、

<?php foreach ($posts as $post): ?>

    <h2><?= $post['title'] ?></h2>

<?php endforeach; ?>

と書いてきても、

別のforeachではありません。

書き方が違うだけです。


7.キーも一緒に取り出せる

foreach には、もうひとつよく見る形があります。

foreach ($user as $key => $value) {
    echo $key;
    echo $value;
}

また => が出てきました。

例えば、

$user = [
    'name' => 'みのり',
    'age' => 18,
    'favorite' => 'ココア'
];

に対して、

foreach ($user as $key => $value) {
    echo $key . ':' . $value . '<br>';
}

とすると、

name:みのり
age:18
favorite:ココア

のようになります。

ここでは、

$key

に、

name
age
favorite

が入り、

$value

に、

みのり
18
ココア

が入ります。

つまり、

foreach ($user as $key => $value)

は、

キーと値をセットで1件ずつ取り出している

わけです。


8.$users as $user の名前は決まりなの?

ここもAIが書いたコードを読むときに知っておくと便利です。

foreach ($users as $user)

の $user は、PHPで決められた名前ではありません。

例えば、

foreach ($users as $person) {
    echo $person['name'];
}

でも動きます。

極端にいえば、

foreach ($users as $banana) {
    echo $banana['name'];
}

でもPHPとしては動きます。

ただし、これは非常に分かりにくいですね。

そのため、

$users → $user

$products → $product

$posts → $post

$items → $item

のように、

複数形 → 単数形

にすることがよくあります。

これを知っているだけでも、AIが生成したコードがかなり読みやすくなります。


9.データベースでforeachが大量に登場する理由

PHPでデータベースから商品一覧を取得したとします。

例えば、

$products = [
    [
        'name' => '商品A',
        'price' => 1000
    ],
    [
        'name' => '商品B',
        'price' => 2000
    ],
    [
        'name' => '商品C',
        'price' => 3000
    ]
];

商品が何件あるかは、状況によって変わるかもしれません。

3件かもしれない。

10件かもしれない。

100件かもしれない。

そこで、

foreach ($products as $product) {
    echo $product['name'];
}

とします。

これなら商品数が変わっても、基本的に同じコードで処理できます。

だから実際のWeb制作では foreach が頻繁に登場するのです。


10.AIが書いたコードを読んでみよう

AIがこんなコードを書いたとします。

foreach ($products as $product) {
    echo '<h2>' . $product['name'] . '</h2>';
    echo '<p>' . $product['price'] . '円</p>';
}

以前なら、

「foreach……as……なんだこれ?」

だったかもしれません。

でも、もう分解できます。

$products
↓
商品一覧

as $product
↓
商品を1件取り出す

$product['name']
↓
その商品の名前

$product['price']
↓
その商品の価格

つまり、

「商品を1件ずつ取り出して、名前と価格を表示している」

だけです。

全部を自分で書けなくても、

何をしているコードなのかは読める。

これが今回の目標です。


11.foreachでよくある「あれ?表示されない」

例えば、

$users = [];

という空の配列だったとします。

そして、

foreach ($users as $user) {
    echo $user['name'];
}

を実行します。

この場合、表示される名前はありません。

なぜなら、

そもそも取り出すデータが0件だから

です。

foreach が壊れているとは限りません。

こんなときは、

var_dump($users);

や、

print_r($users);

で、中身を確認してみましょう。

前回の記事で覚えた方法が、ここでも使えます。


12.AIに聞くときも「foreachがおかしい」だけで終わらせない

例えば、一覧が表示されない場合、

foreachが動きません。

だけでもAIに相談できます。

でも、もう少し情報を渡せます。

例えば、

$users をforeachで処理していますが、何も表示されません。
var_dump($users) の結果は空配列でした。
foreachより前のデータ取得処理に問題がないか確認してください。

ここまで伝えられれば、AIも原因を絞り込みやすくなります。

コードを少し読めるだけで、AIへの質問の質も上がる。

PHPを学ぶメリットは、ここにもあります。


今日の合格ライン

今回覚えておきたいのは、この5つです。

  • foreach は配列を順番に処理する
  • $users as $user は「usersから1件ずつuserとして取り出す」
  • 配列の件数が増えても基本的なコードは変わらない
  • $key => $value ならキーと値の両方を取り出せる
  • 何も表示されないときは、元の配列が空ではないか確認する

特に、

foreach ($users as $user)

を見て、

「usersを1件ずつuserとして処理している」

と読めれば、今回は合格です。


ワンポイント答え合わせ

次のコードを見てみましょう。

$colors = [
    '赤',
    '青',
    '黄色'
];

foreach ($colors as $color) {
    echo $color;
}

何が表示されるでしょう?

A. 赤だけ

B. 黄色だけ

C. 赤・青・黄色

正解は、

C. 赤・青・黄色

です。

$colors の中身を1件ずつ $color に入れて処理しています。

では、こちらはどうでしょう。

foreach ($products as $product) {
    echo $product['name'];
}

これは、

「productsの中の商品を1件ずつ取り出して、それぞれのnameを表示している」

と読めます。

ここまで読めれば十分です。

AI時代だからこそ、磨こう。その腕。

AIなら foreach を使ったコードを一瞬で作ってくれます。

100件の商品一覧を表示するコードも、データベースから取得したユーザーを並べるコードも作れます。

だから、

foreachを何も見ずに完璧に書けること

だけを目標にする必要はありません。

それよりも、

foreach ($users as $user)

を見たとき、

「あ、複数のデータを1件ずつ処理しているんだな」

と分かること。

そして、動かなかったときに、

「foreachが悪いのか? それとも元の配列が空なのか?」

と考えられること。

その力があれば、AIが書いたPHPを扱いやすくなります。

1から全部書く必要はない。

だが、知る必要はある。

次は foreach と一緒によく登場する、

「ifって結局どう読む?」PHPの条件分岐を使って「○○なら表示する」を理解しよう

に進むと、配列 → foreach → if がつながり、実際の一覧画面でよく見るPHPがかなり読めるようになります。

☆ この授業をあとで見返す

学生登録(無料)すると、お気に入りに保存できます。授業は登録しなくても読めます。

☆ この授業をあとで見返す

学生登録(無料)すると、お気に入りに保存できます。授業は登録しなくても読めます。