- 更新日: 2017年03月31日
- 公開日: 2015年12月08日
ゼロから始めるPHP講座Vol16 foreach文とは
ゼロから始めるPHP講座 foreach文とは
foreach文とは
配列の繰り返し処理を行う構文です。 まずはお手本にある通り、foreach文を使ったプログラムを書いてみましょう。 ファイル名: foreach.php
<!--?php
$class = array('鈴木', '佐藤', '斎藤', '伊藤', '杉内');
foreach ($class as $value) {
print $value . "\n";
}
?-->
配列$classの値が順に表示されます。
foreach文の書き方
以下のような書式で配列のループを行います。
ループは配列の中にある箱の数(キーの数)だけ行われます。
具体的にどのような順番で処理が行われるのか、foreach.phpを例に示します。
foreach文は繰り返しごとに値を「値を入れる変数」に代入し、キーの数だけループし終わると、foreach文が終了します。
配列の中身が空だった場合、ループは1度も実行されません。※配列以外を指定した場合はエラーとなります。
また、以下の書式を利用すると、配列の値だけでなくキーも取り出して使うことができます。
ループは配列の中にある箱の数(キーの数)だけ行わることに変わりはありません。
foreach.phpの場合はキーが数値のため、キーを取り出す必要性がありませんが、連想配列の場合はキーにある文字列も利用したいことがあり、この場合は「キーを入れる変数」を使用できる「配列 as $key => $value」の書式を利用します。
foreach文の使用例
foreachを使用することにより、非常に効率良くプログラムを書くことができます。 お手本にある通り、foreachを使ったプログラムを書いてみましょう。 ファイル名: foreach_sample.php
<!--?php
/*
* 配列$areasは長いので手打ちせずコピーして利用してください。
*/
// 都道府県を配列で定義
$areas = array(
'北海道',
'青森県',
'岩手県',
'宮城県',
'秋田県',
'山形県',
'福島県',
'茨城県',
'栃木県',
'群馬県',
'埼玉県',
'千葉県',
'東京都',
'神奈川県',
'新潟県',
'富山県',
'石川県',
'福井県',
'山梨県',
'長野県',
'岐阜県',
'静岡県',
'愛知県',
'三重県',
'滋賀県',
'京都府',
'大阪府',
'兵庫県',
'奈良県',
'和歌山県',
'鳥取県',
'島根県',
'岡山県',
'広島県',
'山口県',
'徳島県',
'香川県',
'愛媛県',
'高知県',
'福岡県',
'佐賀県',
'長崎県',
'熊本県',
'大分県',
'宮崎県',
'鹿児島県',
'沖縄県',
);
?-->
<meta charset="UTF-8">
<title>foreachの使用例</title>
<form action="#"> 出身の都道府県を選択してください
<select name="area">
<!--?php
// 都道府県の配列をループさせる
foreach ($areas as $key =--> $area) {
?>
<option value="<?php print $key; ?>"><!--?php print $area;?--></option>
<!--?php
}
?-->
</select></form>
ドロップダウンリストで、都道府県を入力するページをイメージしています。
表示だけだと効率的に思えませんが、$areasから好きな都道府県を1つ削りファイル更新すると、削った都道府県がドロップダウンリストに表示されなくなります。
foreachは配列のキーの数だけループが行われるため、配列のキーと値が増減した際、foreach文に関しては何も手を加えなくても自動でループの数も調節されるのが、魅力の1つです。
補足. $keyと$valueについて
foreach文を利用する際、キーと値を入れる変数として$keyと$valueを利用していましたが、この変数名は自由につけることができます。
しかしそれぞれ配列のキー(key)と値(value)を入れるための変数のため、$keyと$valueという変数名が使われることが多いです。
課題 1問目
次の連想配列を用い、foreach文で「◯◯さんのアダ名は△△です。」となるよう、全員分の名前とアダ名を表示してください。 ファイル名: challenge_foreach.php
繰り返し処理の使い分け
for文、while文、foreach文と3つの繰り返し処理を学びましたが、この使い分けは一般的に以下となります。
- for文
- 繰り返しの回数が決まっている場合
- while文
- ある条件を満たすまでループを行いたい場合
- foreach文
- 配列、連想配列の展開を行いたい場合
あくまで一般的な例のため必ずしもこのように使い分ける必要はありませんが、
「配列、連想配列の展開はforeach文」
は基本的に順守しましょう。
理由は大きく2つあり、1つは処理内容(配列の展開)がソースコードからすぐに分かること、もう1つは処理速度で、詳細は次の補足で説明致します。
補足. 繰り返し処理の速度
プログラムは「処理する内容が多くなる = コンピュータが処理するのに時間がかかる」となり、結果として表示されるまでの時間が長くなります。 例えば下記URLにアクセスすると、表示まで数秒かかります。 loop.php
<!--?php
$loop = 100000000;
$sum = 0;
for ($i = 1; $i <= $loop; $i++) {
$sum = $sum + $i;
}
print '1から' . $loop . 'まで足した合計値は' . $sum;
?-->
loop.phpは、1から1億までの数字を足した合計値を計算しており、プログラム自体は8行と短いですが、1億回の繰り返し処理という膨大な処理を行っています。
現在はあまり実感がないかもしれませんが、規模の大きなサービスを作成すると処理内容が多くなり、処理が遅くなることが多々あります。 ※表示が遅いWebページを一度は体験したことがあるのではないでしょうか 表示が遅くなる原因はプログラム以外にもインターネット速度やサーバ性能など多数の要因がありますが、少しでも原因を減らすよう、プログラムの処理速度は意識したいところです。 そこで本題となる繰り返し処理の速度ですが、全く同じ配列の展開をfor文、while文、foreach文で行った場合、最も処理が速いのはforeach文となります。 よって何か理由がない限り、配列の展開にはforeach文を利用するようにしましょう。
課題 2問目
1から100までの整数に対し、
3で割り切れる場合は「Fizz」 5で割り切れる場合は「Buzz」 3でも5でも割り切れる場合は「FizzBuzz」 上記以外は数値そのまま を表示してください。
なお、どの繰り返し処理を利用するかは自由です。 ファイル名: challenge_loop.php 解答例) 1から18までの表示
NEXT LESSON ☛ ファイル操作の基礎
PREV LESSON ☛ while文を使った繰り返し処理
- この記事を書いた人
- CodeCampus編集部