【2026年8月最新】PHPのforeach文とは?基本構文から応用・注意点まで解説
「foreach文って何?for文と何が違うの?」——PHPの学習を始めたばかりの方や、開発会社から納品されたコードを確認する立場の担当者から、こうした質問をよくいただきます。
foreach文は、PHPで配列の中身を1つずつ順番に取り出して処理するための構文です。ECサイトの商品一覧表示や、CSVデータの一括処理など、実務で扱うプログラムの大半に登場するほど基本かつ重要な構文です。
この記事では、foreach文の基本構文、連想配列の扱い方、break/continueによる制御、参照渡しを使った応用と注意点までを網羅的に解説します。さらに後半では、「構文を覚えて自分でコードを書く」ことの次に来ている、AIにロジックを伝えるだけでコードが完成する時代について、AI鬼管理を運営する株式会社GENAIの実例を交えて紹介します。
この記事を読み終える頃には、次のことが明確になっています。
01 BASICS foreach文とは — 基本を理解する 配列の中身を1つずつ処理するための構文
foreach文は、PHPにおいて配列(複数のデータをまとめて格納する入れ物)の要素を、先頭から順番に1つずつ取り出して処理するための繰り返し構文です。「配列の中身を全部処理したい」という場面で、最もシンプルかつ安全に書ける方法として広く使われています。
📚 用語解説
配列(array):複数のデータを1つの変数にまとめて格納できる仕組み。PHPでは「商品名のリスト」「顧客情報の一覧」のような、同種のデータをまとめて扱いたい場合に使われます。foreach文は、この配列の中身を順番に取り出すために使います。
1-1. for文との違い
繰り返し処理にはfor文もありますが、for文は「何回繰り返すか」を回数で管理する必要があります。一方foreach文は、配列の要素数を気にせず、あるだけ全部処理してくれるため、配列を扱う場面ではforeach文の方がシンプルかつ間違いが起きにくい書き方になります。
| 項目 | for文 | foreach文 |
|---|---|---|
| 繰り返し回数の管理 | 自分で回数・条件を指定する必要がある | 配列の要素数ぶん自動で繰り返す |
| 書きやすさ | カウンタ変数の管理が必要 | 配列さえあればシンプルに書ける |
| 向いている場面 | 決まった回数の繰り返しや細かい制御 | 配列やリストの全件処理 |
「配列の中身を1つずつ処理したい」という要件であれば、まずforeach文を検討するのが定石です。for文は、要素の番号(インデックス)を使った細かい制御が必要な場合に選択肢になります。
1-2. foreach文が実務で使われる典型的な場面
foreach文は、PHPを使ったWebアプリケーション開発において、日常的に登場する構文です。代表的には、データベースから取得した検索結果を一覧表示する、CSVファイルの各行を読み込んで処理する、フォームから送信された複数のチェックボックスの値をまとめて処理するといった場面が挙げられます。
1-3. なぜPHPの学習で早い段階に登場するのか
foreach文が初心者向けの教材で早い段階に登場するのは、Webアプリケーションの多くが「データベースから取得した複数件のデータを、画面に一覧表示する」という処理を土台にしているためです。ログイン機能や複雑な条件分岐を学ぶ前段階として、まず配列とforeach文の扱いに慣れておくことが、その後の学習をスムーズにする近道になります。
02 SYNTAX foreach文の基本構文 配列・連想配列それぞれの書き方を確認する
2-1. 通常の配列を処理する
最も基本的な書き方は、配列の値だけを1つずつ取り出すパターンです。
$fruits = ["りんご", "みかん", "ぶどう"];
foreach ($fruits as $fruit) {
echo $fruit . "\n";
}
// 出力結果:
// りんご
// みかん
// ぶどう
asの後ろに書いた変数(この例では$fruit)に、配列の各要素が順番に代入され、繰り返しのたびに中身が処理されます。
2-2. 連想配列(キーと値のペア)を処理する
PHPの配列には、「キー」と「値」のペアで管理する連想配列もあります。連想配列の場合、キーと値の両方を同時に取り出すことができます。
📚 用語解説
連想配列:データに「名前(キー)」を付けて管理する配列。通常の配列が0, 1, 2...という連番でデータを管理するのに対し、連想配列は「name」「price」のような任意の文字列をキーとして使えるため、意味のあるデータ構造を表現しやすくなります。
$product = ["name" => "ノートPC", "price" => 98000];
foreach ($product as $key => $value) {
echo $key . ": " . $value . "\n";
}
// 出力結果:
// name: ノートPC
// price: 98000
as $key => $valueという書き方によって、キーと値の両方を同時に扱えるようになります。キーが不要な場合はas $valueのみでよく、値が不要でキーだけ欲しい場合はほとんどありませんが、array_keys()関数と組み合わせる方法もあります。
03 CONTROL breakとcontinueによる制御 繰り返しの流れを途中で変える2つの命令
foreach文の中では、breakとcontinueという2つの命令で、繰り返しの流れを制御できます。この2つは名前が似ていますが、挙動は明確に異なります。
| 命令 | 挙動 | 例えるなら |
|---|---|---|
| break | 繰り返し処理そのものを中断し、ループの外に抜ける | 「もうこの作業は終わり」と全体を打ち切る |
| continue | 今回の処理だけをスキップし、次の要素の処理に進む | 「これは飛ばして次へ」と1件だけ飛ばす |
$numbers = [1, 2, 3, 4, 5];
foreach ($numbers as $num) {
if ($num == 3) {
break; // 3が来たらループ全体を終了
}
echo $num . "\n";
}
// 出力: 1, 2
foreach ($numbers as $num) {
if ($num == 3) {
continue; // 3だけスキップして次へ
}
echo $num . "\n";
}
// 出力: 1, 2, 4, 5
「3を除外したい」というつもりでbreakを使ってしまうと、3以降の要素(4, 5)まで処理されなくなります。「この1件だけ除外したい」場合はcontinue、「ここで全体を打ち切りたい」場合はbreakと、目的に応じて正しく使い分ける必要があります。
04 REFERENCE 参照渡し(&)を使った応用と注意点 元の配列そのものを書き換えたいときに使う
通常のforeach文では、取り出した値は「コピー」として扱われるため、ループの中で値を変更しても元の配列には反映されません。元の配列そのものを直接書き換えたい場合は、参照渡し(&)を使います。
📚 用語解説
参照渡し(&):変数の「値のコピー」ではなく、変数そのもの(メモリ上の実体)を直接操作できるようにする書き方。foreach文で&を付けると、ループ内での変更が元の配列にそのまま反映されます。
$numbers = [1, 2, 3];
foreach ($numbers as &$num) {
$num = $num * 2;
}
unset($num); // 参照を解除するのを忘れずに
print_r($numbers);
// 出力: [2, 4, 6](元の配列が書き換わっている)
参照渡しを使ったforeach文の後、参照変数(この例では$num)はループを抜けた後も「最後の要素への参照」を保持し続けます。この状態で別のforeach文などに同じ変数名を再利用すると、意図しない値の書き換えが起きる典型的なバグの原因になります。ループの直後に必ずunset()で参照を解除する習慣をつけてください。
4-1. 参照渡しを使わない代替手段
unset忘れのリスクを避けたい場合、参照渡しを使わずに新しい配列を作って返すという書き方もよく使われます。array_map()関数を使えば、foreach文と同様の処理を、より安全な形で書けることがあります。
$numbers = [1, 2, 3];
// array_mapを使えば参照渡し(&)なしで同じ結果を得られる
$doubled = array_map(function ($num) {
return $num * 2;
}, $numbers);
print_r($doubled);
// 出力: [2, 4, 6](元の$numbersは変更されない)
array_map()は、元の配列を書き換えずに新しい配列を作るため、「元のデータをうっかり変更してしまう」というリスクを避けられる点がメリットです。単純な変換処理であれば、参照渡しのforeach文よりもこちらの方が安全な選択肢になることがあります。
📚 用語解説
array_map():配列の各要素に対して、指定した処理(関数)を適用し、その結果を新しい配列として返すPHPの組み込み関数。foreach文で1件ずつ処理するのと似た結果が得られますが、元の配列は変更されないという違いがあります。
05 PRACTICAL USE 実務での活用例とよくあるミス テーブル生成・データ集計での使い方
5-1. HTMLテーブルへのデータ埋め込み
foreach文が最も活躍する場面の一つが、データベースやCSVから取得した一覧データを、HTMLテーブルとして表示する処理です。
<table>
<?php foreach ($products as $product): ?>
<tr>
<td><?= $product["name"] ?></td>
<td><?= $product["price"] ?>円</td>
</tr>
<?php endforeach; ?>
</table>
この例のように、HTMLに埋め込む場合はforeach (...):とendforeach;という「代替構文」もよく使われます。波括弧{ }を使う書き方より、HTMLとの境目が視覚的に分かりやすくなるという利点があります。
5-2. 多重ループでの注意点
foreach文の中に、さらに別のforeach文を入れる「多重ループ」もよく使われます。この場合、それぞれのループで使う変数名を混同しないよう注意が必要です。特に参照渡し(&)を多重ループで使う場合は、前述のunset忘れの影響が及ぶ範囲が広がるため、より一層の注意が求められます。
foreach文は、対象の配列が空(要素数0)であっても、エラーにはならずそのまま何も処理せずに終了します。「データが0件のときの表示」を別途用意する場合は、foreach文の前後でif文による分岐を追加する設計にします。
5-3. 多次元配列を処理する場合
実務のデータは、単純な一覧ではなく「配列の中に配列が入っている」多次元配列であることも多くあります。例えば、1人の顧客情報の中に「注文履歴」という配列がさらに含まれている、といった構造です。この場合、外側のforeach文の中で、さらに内側のforeach文を使って注文履歴を処理する、という多重ループの形になります。
$customers = [
["name" => "山田様", "orders" => ["商品A", "商品B"]],
["name" => "佐藤様", "orders" => ["商品C"]],
];
foreach ($customers as $customer) {
echo $customer["name"] . "\n";
foreach ($customer["orders"] as $order) {
echo " - " . $order . "\n";
}
}
📚 用語解説
多次元配列:配列の要素として、さらに別の配列が格納されているデータ構造。「顧客情報の一覧の中に、それぞれの注文履歴という配列が入っている」のように、階層を持つデータを表現する際に使われます。
foreach
顧客を
1人ずつ取り出す
foreach
その人の注文を
1件ずつ取り出す
実行
表示・集計
などを行う
多次元配列を処理するコードでバグが起きた場合は、まずこの図のように「今、外側と内側のどちらのループの、何番目の要素を処理しているのか」を切り分けて考えると、原因の特定がスムーズになります。
06 BEYOND SYNTAX 【独自】「構文を書く」から「AIにロジックを伝える」時代へ foreach文の理解は今も重要。ただし選択肢はもう1つ増えている
ここまで、foreach文の使い方を詳しく解説してきました。PHPで開発を行うエンジニアにとって、この知識は今も欠かせません。一方で、「データを一覧処理するツールが欲しいが、PHPの文法を覚えるつもりはない」という経営者・管理職にとっては、もう1つの選択肢が現実的になっています。それが、AIコーディングエージェントにロジックを伝えて、コード作成そのものを任せる方法です。
📚 用語解説
AIコーディングエージェント:人間が「この顧客リストを1件ずつ処理して、条件に合うものだけ抽出して」のように日本語で伝えるだけで、AIがforeach文を含む必要なコードを設計・記述・実行してくれるAI。Anthropic社の「Claude Code」などが代表例です。
6-1. 【GENAI独自データ】データ一覧処理をClaude Codeに任せている実例
弊社(株式会社GENAI)では、AIコーディングエージェント「Claude Code」をMax 20xプラン(月額$200・約30,000円)で契約し、顧客リストの一括処理、CSVデータの整形、レポート用テーブルの自動生成といった、従来foreach文を使ったPHPスクリプトで人力対応していた処理を、AIに指示するだけで完結させています。
| 作業内容 | 従来(自分でPHPを書く) | AIエージェント(Claude Code) |
|---|---|---|
| 一覧データの処理 | foreach文の文法・変数の扱いを理解する必要 | 「このリストを1件ずつ処理して」で完了 |
| 参照渡しのバグ回避 | unset忘れなど、経験に基づく注意が必要 | AIが定石を踏まえてコードを生成 |
| テーブル生成 | HTML+PHPの構文を正確に書く必要 | 「表にして」と伝えるだけ |
| 向いている人 | エンジニアとして専門性を高めたい人 | 結果だけ早く欲しい非エンジニア |
6-2. 「基本を理解している人」の指示の方が精度が高い
興味深いことに、foreach文の考え方(1件ずつ処理する、条件で絞り込む、集計するなど)を理解している人ほど、AIエージェントへの指示も的確になる傾向があります。「配列の中身を1件ずつどう扱いたいか」を明確に言語化できる人は、それだけAIに伝える要望も具体的になり、一度で望む結果に近づきやすくなるためです。この記事で紹介した基礎知識は、AI時代においても「良い指示を出すための土台」として活きてきます。
逆に言えば、「なんとなくいい感じにして」という曖昧な依頼では、AIエージェントも最適な処理を推測しきれないことがあります。「1件ずつ、どういう条件で、何をしたいのか」というforeach文的な思考の分解ができるようになるだけで、AIとのやり取りの精度は大きく向上します。
07 GETTING STARTED 【独自】非エンジニアの経営者がAIでデータ処理を任せる3ステップ PHPの文法を覚える必要はない
「顧客データやCSVを一覧処理したいが、PHPは分からない」という方に向けて、AIエージェントを使ってデータ処理を進めるまでの3ステップを紹介します。
処理したい
データを渡す
1件ずつ
何をしたいか伝える
結果を確認・
修正依頼
7-1. ステップ1:処理したいデータをそのまま渡す
CSVファイルやExcelファイル、テキストのリストなど、処理したい元データをそのままAIエージェントに渡します。ファイルの形式変換や前処理も、多くの場合AI側が対応してくれます。
7-2. ステップ2:1件ずつ何をしたいかを伝える
「このリストの中から、購入金額が1万円以上の顧客だけを抜き出して」というように、1件のデータに対してどんな条件で・何をしたいかを伝えます。この「1件ずつどう処理するか」という考え方こそが、foreach文の本質そのものです。裏側でAIがforeach文を含むコードを組み立てて実行してくれます。
7-3. ステップ3:結果を確認し、必要なら条件を調整する
出力された結果を確認し、「もう少し条件を絞りたい」「この項目も追加してほしい」といった調整があれば、追加で伝えるだけで反映されます。プログラミングの知識がなくても、対話を重ねることで求める形に近づけていけます。
08 CONCLUSION まとめ ── foreach文の基本と、AIに任せる選択肢 目的に応じて、構文を学ぶ道と任せる道を使い分ける
この記事では、PHPのforeach文の基本構文、連想配列の扱い方、break/continueによる制御、参照渡しの注意点、実務での活用例、そしてAIにコード作成を任せる時代の考え方までを整理しました。最後にポイントを振り返ります。
foreach文の文法を理解して自分でコードを書けるようになることも、AIエージェントにロジックを伝えて任せることも、どちらも有効な選択肢です。「今すぐこの処理を終わらせたい」なら後者、「継続的に開発に関わる」なら前者の理解も深めておく、という使い分けをおすすめします。
配列を1件ずつ処理するという考え方は、PHPに限らずほとんどのプログラミング言語に共通する基本概念です。この記事で紹介したforeach文の仕組みを理解しておくことは、将来的に他の言語を学ぶ際にも土台として役立ちます。まずは小さなコードを実際に書いて動かしながら、体で仕組みを覚えていくことをおすすめします。
この記事の内容を参考に、ぜひ手元の環境で実際にforeach文を書いて動かしてみてください。頭で理解するだけでなく、実際にコードを実行して結果を確認することで、記憶への定着度が大きく変わってきます。
構文を覚える前に、AIに相談してみませんか
データの一覧処理にPHPの習得は必須ではなくなりつつあります。
AI鬼管理では、Claude Codeを使ったデータ処理・業務自動化を無料相談で伴走支援しています。
ここから先の進め方は、大きく2つあります。
自社で回せるようになりたい方は、AI鬼管理でClaude Code/Codexの使い方から業務設計・社内定着まで伴走を受けながら、社内に仕組みを作る道があります。
覚えるより任せたい方は、AIBPO by AI鬼管理でこの記事のような定型業務を丸ごと預ける道があります。総額はいまの業務コストの70〜80%が目安、月額基本料は0円です。
どちらが合うかは、業務量と社内体制次第です。無料相談・無料適合診断で、貴社の場合はどちらが向くかからご相談いただけます。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
よくある質問
Q. foreach文とfor文はどちらを使うべきですか?
A. 配列の中身を全件処理したいだけであれば、foreach文の方がシンプルで安全です。要素の番号(インデックス)を使った細かい制御が必要な場合や、決まった回数だけ繰り返したい場合はfor文が適しています。
Q. 連想配列のキーだけを取り出したい場合はどうすればいいですか?
A. foreach文でas $key => $valueと書けば、キーと値の両方を取得できます。キーだけが必要な場合はarray_keys()関数で配列のキー一覧を取得し、それをforeachで処理する方法もあります。
Q. breakとcontinueを間違えるとどうなりますか?
A. breakは繰り返し処理全体を打ち切るため、以降の要素が処理されなくなります。continueは該当する1件だけをスキップし、残りの要素は引き続き処理されます。「1件だけ除外したい」場合にbreakを使うと、意図せず後続の処理まで止まってしまうため注意が必要です。
Q. 参照渡し(&)を使うとどんなメリットがありますか?
A. 通常のforeach文では値のコピーが渡されるため、ループ内での変更は元の配列に反映されません。参照渡しを使うと、元の配列そのものを直接書き換えられるため、配列の値を一括変換したい場合などに便利です。ただし使用後は必ずunset()で参照を解除する必要があります。
Q. foreach文で処理する配列が空だとエラーになりますか?
A. エラーにはなりません。対象の配列が空(要素数0)の場合、foreach文は何も処理せずそのまま終了します。「データが0件のときの表示」を別途行いたい場合は、foreach文の前後にif文で分岐を追加します。
Q. PHPが分からなくてもAIにデータ処理を任せられますか?
A. 任せられます。Claude CodeのようなAIコーディングエージェントは、「このリストを条件で絞り込んで」といった日本語の指示から、foreach文を含む必要なコードを設計・実行してくれます。文法を覚えている必要はありません。
Q. array_map()とforeach文はどう使い分ければいいですか?
A. 単純に「各要素に同じ変換処理を適用して新しい配列を作りたい」だけであればarray_map()が簡潔で安全です。一方、条件分岐や複数の処理を組み合わせたい、元の配列以外の変数も同時に更新したいといった複雑な処理が必要な場合はforeach文の方が柔軟に対応できます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




