概要
配列の中身を 1 つずつ取り出して処理する時に使うのが foreach。書き方は foreach ($arr as $v) { ... } で、$arr の各要素が順番に $v に入ってブロックの中で使える。for 文と違って インデックス変数 $i を自分で管理しなくていい ので、ループの書きまちがいが起きにくい。
foreach ($arr as $v) の形は 値だけ を取り出すバリエーション。連想配列に対して使うと、キーは無視されて値だけが順番に $v に入る。たとえば商品ごとの金額が入った連想配列で「合計いくら?」を計算したい時のように、キーの中身は気にせず値で集計する ような場面で使い勝手がいい。次の章で扱う as $k => $v 形式は必要な時だけ使えばよく、まずはこのシンプルな形を体に入れる。
注意点として、PHP の foreach は内部で 配列のコピー (またはイテレータ) を作って 走査している。そのためループ中に元の配列を unset したり追加したりしても安全に最後まで回るが、配列が大きいとメモリを余分に使う。ドリル 02 と 03 では合計・連結という代表的な集計パターンを通して、foreach で「畳み込む」発想を身につける。
学習目標
foreach ($arr as $v)で連想配列の値を 1 つずつ取り出せる- ループの中で値を加工・集計できる
- 添字配列でも連想配列でも書き方は同じだと理解する
ドリル
| no | 内容 |
|---|---|
| 01 | foreach で全要素を 1 行ずつ出力 |
| 02 | 整数の連想配列を foreach で合計 |
| 03 | 文字列の連想配列を foreach で連結 |
📝 演習: ドリル 01 — foreach で全要素を出力
問題
以下の連想配列が与えられています。
$scores = [
'math' => 80,
'english' => 70,
'science' => 90,
];foreach で値だけを取り出し、上から順に 1 行ずつ出力してください。
期待される出力:
80
70
90ヒント
foreach ($scores as $v) { echo $v . "\n"; }
📝 演習: ドリル 02 — foreach で合計
問題
以下の連想配列が与えられています。
$scores = [
'math' => 80,
'english' => 70,
'science' => 90,
];foreach で全ての値を合計し、その合計を 1 行で出力してください。
期待される出力:
240ヒント
- ループの外で
$sum = 0; - ループの中で
$sum += $v; - 最後に
echo $sum . "\n";
📝 演習: ドリル 03 — foreach で文字列連結
問題
以下の連想配列が与えられています。
$labels = [
'morning' => 'おはよう',
'noon' => 'こんにちは',
'night' => 'こんばんは',
];foreach で全ての値を取り出し、半角スペース 1 個区切りで連結して 1 行で出力してください。
末尾に余分なスペースは入れないでください。
期待される出力:
おはよう こんにちは こんばんはヒント
- 空文字
$joined = '';を用意 $joined .= $v . ' ';で追記echo trim($joined) . "\n";で末尾スペースを落として出力