
【PHP】foreach文(繰り返し処理) – 配列の値を1つずつ取り出す
配列から値を1つずつ取り出すにはforeach文と呼ばれる繰り返し処理を使うと便利です。
ここではforeach文について解説します。
-
foreach文
-
for文とforeach文の比較
foreach文とは
foreach文は繰り返し処理を行うための仕組みで、配列から値を1つずつ取り出し、繰り返し処理を実行します。
繰り返し処理にはfor文を使う方法もありますが、異なる点は『配列と合わせて使用すること』と『配列の値の数だけ繰り返し処理を行うこと』です。
foreach文で実装できるプログラムはfor文でも実装できますが、foreach文を使うことで、コードの可読性向上やバグの原因を抑えて実装することができます。
基本構文
foreach文の基本構文は次のようになります。
foreach( $配列名 as $変数名 ) {
// 処理1
// 処理2
// ・・・・・・・・
}
処理の順序
foreach文の処理の順序は次のようになります。
- 配列の先頭から値を1つ取り出す
- 取り出す値がない場合、終了する
- 取り出した値を変数に記憶する(
as
の後ろの変数) - ブロックの処理を実行する
- 1に戻る
サンプルコード
foreach文を使ったサンプルコードをご覧ください。
<?php
$fruits = [
'Apple',
'Orange',
'Grape',
'Melon',
];
foreach( $fruits as $data ) {
echo $data."\n";
}
?>
Apple
Orange
Grape
Melon
foreach文の繰り返しごとに$fruits
から値を1つずつ取り出し、as
に続く$data
に記憶しています。
実行結果からも値が1つずつ取り出せていることが分かります。
foreach文とfor文の比較
foreach文ができることは、for文でもできますが、配列から値を取り出す繰り返し処理の場合は、foreach文の方がコードの可読性とバグの原因を抑える面で優れています。
比較するため、上記サンプルコードのfor文バージョンをご覧ください。
for文の場合
<?php
$fruits = [
'Apple',
'Orange',
'Grape',
'Melon',
];
for( $i = 0; $i < count($fruits); $i++ ) {
echo $fruits[$i]."\n";
}
?>
Apple
Orange
Grape
Melon
変わった部分は10行目と11行目になります。
先ず記述量が増えたことでコードが読みづらくなったことが分かります。
また、count($fruits)
は$fruits
に記憶された値の数を取得する記述で、それを使って繰り返し回数の条件式を記述しています。
この条件式を間違えてしまうとエラーが発生する原因になります。
例えば、条件式を誤って$i <= count($fruits)
とした場合を見てみましょう。
<?php
$fruits = [
'Apple',
'Orange',
'Grape',
'Melon',
];
for( $i = 0; $i <= count($fruits); $i++ ) {
echo $fruits[$i]."\n";
}
?>
PHP Warning: Undefined array key 4 in sample.php on line 11
Warning: Undefined array key 4 in sample.php on line 11
条件式により$i
が0〜4の間は繰り返し処理しますが、4はキーに存在しないため、エラーになります。
foreach文であれば配列の値の数に合わせて繰り返し処理を行うので、こういったバグの原因を防ぐことができます。
演習問題
次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。
- 配列型の変数
$price_list
を使用する $price_list
に1000
、2700
、5800
を記憶する$price_list
の値の合計値をforeach文を使って計算する- 合計値は
$total
に記憶する $total
を出力する
9500
コマンドライン引数で与えた数値(複数)の合計値を計算するプログラムを作成してください。
なお、下記条件を満たすものとします。
- 合計値はforeach文を使って計算する
- 合計値は
$total
に記憶する $total
を出力する
$ php practice.php 5 14 28 71
total : 118
$ php practice.php 11 22 33 44 55 66 77 88 99
total : 495
まとめ
foreach文は配列の値を1つずつ取り出しながら、繰り返し処理を行う仕組みです。
for文との違いを理解し、使い分けすることでプログラムを正確に早く作れるようになるので、覚えていきましょう。