・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2022年9月18日に投稿されました。)
PHPで繰り返し処理を行う方法として、foreach文があります。
foreach文とは、配列の中に格納されている要素の数だけ繰り返し処理を行う文法になります。
PHPの繰り返し処理はforeach文の他にもfor文やwhile文、do〜while文があり、どの文法を使用しても、配列の要素を取り出すことができます。
しかし、それらの文法と違ってループする回数を指定しなくてもいいのがforeach文のメリットになります。
また、配列の中にある要素に対して使用できるので、連想配列にも使用することができます。
繰り返し処理というものは、プログラミングをする上でとても必要な処理になってきますので、foreachについて理解したい場合は、この記事を見て学習するようにしましょう。
今回はPHPのforeach文で配列や連想配列の要素数に合わせて繰り返し処理を行う方法について紹介していきます。
・foreach文について詳しく知りたい人
foreach文とは
foreach文とは、指定した配列のそれぞれの要素に対して処理を行う文法になります。
指定した配列の要素を一つずつ取り出し、その要素に対して処理を行うことができます。
foreach文の書き方
foreach文の書き方は、下記の2パターンがあります。
配列の要素の値のみを取り出す場合
配列の要素の値のみ取り出す場合のforeach文は以下のように書きます。
1 2 3 4 5 | <?php foreach(配列名 as 変数){ //処理内容 } ?> |
配列名に対象の配列を指定します。
そして、変数を指定することで配列内にある各値に対して繰り返し処理を行うようになります。
最後の値に到達すると、処理を終了します。
配列の要素のキーと値を取り出す場合
また、配列の要素のキーと値を取り出す場合のforeach文は以下のように書きます。
1 2 3 4 5 | <?php foreach(配列名 as キー => 変数){ //処理内容 } ?> |
配列名に対象の配列を指定します。
そして、各要素のキーと値を取り出すためにキーと変数を指定することで、配列内にある値を、キーと共に取り出すことができます。
最後の値に到達すると、処理を終了します。
foreach文で配列や連想配列の数に合わせて繰り返し処理を行うサンプルコード
foreach文で配列や連想配列の数に合わせて繰り返し処理を行うサンプルコードをご紹介します。
ここでは、下記の2つの場合でforeach文を使用します。
- 配列の要素数に合わせて繰り返し処理を行う場合
- 連想配列の要素数に合わせて繰り返し処理を行う場合
配列の要素数に合わせて繰り返し処理を行う場合
foreach文を使って、配列の要素数に合わせて繰り返し処理を行ってみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 | <?php echo '⚫︎ 対象の配列'; $colors = ['赤', '青', '黄', '緑', '橙']; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $color) { echo $color; echo "\n"; } ?> |
実行結果
foreach文によって、配列の要素数に合わせて繰り返し処理が行われています。
そのため、配列から取り出した要素の値が全て表示されています。
また、キーと値の両方を取り出す書き方で配列の要素数に合わせて繰り返し処理を行ってみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php echo '⚫︎ 対象の配列'; $colors = ['赤', '青', '黄', '緑', '橙']; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key => $color) { echo $key; echo ': '; echo $color; echo "\n"; } ?> |
実行結果
配列から取り出した要素のキーと値が表示されています。
連想配列の要素数に合わせて繰り返し処理を行う場合
foreach文を使って、連想配列の要素数に合わせて繰り返し処理を行ってみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php echo '⚫︎ 対象の連想配列'; $colors = [ 'Red'=> '赤' , 'Blue' => '青', 'Yelllow' => '黄', 'Green' => '緑', 'Orange' => '橙' ]; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $color) { echo $color; echo "\n"; } ?> |
実行結果
foreachによって連想配列の要素数に合わせて繰り返し処理が行われています。
そのため、連想配列から取り出した要素の値が全て表示されています。
また、こちらもキーと値の両方を取り出す書き方で連想配列の要素数に合わせて繰り返し処理を行ってみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php echo '⚫︎ 対象の連想配列'; $colors = [ 'Red'=> '赤' , 'Blue' => '青', 'Yelllow' => '黄', 'Green' => '緑', 'Orange' => '橙' ]; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key => $color) { echo $key; echo ': '; echo $color; echo "\n"; } ?> |
実行結果
連想配列から取り出した要素のキーと値が表示されています。
foreach文の繰り返し処理の最中で操作できる文法の一覧
foreach文を使用している間に、他の文法を使用することで、繰り返し処理が行われている間に、さまざまな処理を行うことができます。
ここでは、foreach文の繰り返し処理の最中で使用できる下記の4つについてご紹介します。
- 条件によって繰り返し処理を分岐する場合
- 繰り返し処理を途中で中止する場合
- 繰り返し処理中に処理を飛ばす場合
- 条件によって繰り返し処理を多岐分岐する場合
条件によって繰り返し処理を分岐する場合
条件によって繰り返し処理を分岐する場合はif文を使用します。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php echo '⚫︎ 対象の配列'; $colors = ['紫', '桃', '紺', '白', '黒']; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key => $color) { if($color == '黒') { echo $key; echo ': '; echo $color; echo "\n"; } echo $color; echo "\n"; } ?> |
実行結果
if文を使用することで、繰り返し処理を条件によって分岐することができます。
そのため、黒の値を取り出した場合のみキーが取り出されています。
繰り返し処理を途中で強制終了する場合
繰り返し処理を途中で強制終了する場合は、breakを使用します。
break文は繰り返し処理を途中で抜けることができる挙動になります。
foreachは配列の全ての要素に対して繰り返し処理が行われますが、breakを使用することで、途中であっても繰り返し処理を強制的に終了させることができます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php echo '⚫︎ 対象の配列'; $colors = ['紫', '桃', '紺', '白', '黒']; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key => $color) { echo $key; echo ': '; echo $color; echo "\n"; if($key == 2) { break; } } ?> |
実行結果
breakによって繰り返し処理が途中で強制終了しています。
そのため、「紺」以降にある「白」と「黒」のキーと値が表示されていません。
繰り返し処理中に処理を飛ばす場合
繰り返し処理中に処理を飛ばす場合は、continueを使用します。
continueは、繰り返し処理を一時的にスキップすることができる文法になります。
そのため、配列の全ての要素に対して繰り返し処理は行われますが、ある条件だけ一致する値だけ処理をスルーすることができます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php echo '⚫︎ 対象の配列'; $colors = ['紫', '桃', '紺', '白', '黒']; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key => $color) { if($key % 2 == 1) { continue; } echo $key; echo ': '; echo $color; echo "\n"; } ?> |
実行結果
continueによって繰り返し処理を途中でスキップしています。
そのため、奇数のキーである「桃」と「白」のキーと値が表示されていません。
条件によって繰り返し処理を多岐分岐する場合
条件によって繰り返し処理を多岐分岐する場合はswitch文を使用します。
switch文とは、ある式の値に対して複数の分岐の処理を行うことができる文法になります。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php echo '⚫︎ 対象の配列'; $colors = ['紫', '桃', '紺', '白', '黒']; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key => $color) { switch($color) { case '紫': echo 'あけび'; break; case '桃': echo 'すもも'; break; case '紺': echo '葡萄'; break; case '白': echo 'ドラゴンフルーツ'; break; case '黒': echo 'ビオレソリエス'; break; } echo "\n"; } ?> |
実行結果
switch文を使用することで、繰り返し処理を条件によって多数の分岐を行っています。
そのため、それぞれの値に適した果物の名前が表示されています。
foreach文で多次元配列の要素数に合わせて繰り返し処理を行うサンプルコード
foreach文で多次元配列の要素数に合わせて繰り返し処理を行うサンプルコードについてご紹介します。
2次元配列の場合
2次元配列にforeach文を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php echo '⚫︎ 対象の2次元配列'; $colors = [ ['紫', '桃', '紺','白', '黒'], ['赤', '青', '黄', '緑', '橙'] ]; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key1 => $colors1) { foreach($colors1 as $key => $color) { echo "$key: $color"; echo "\n"; } echo "\n"; } ?> |
実行結果
foreach文の中にforeach文を使用することで、2次元配列の中にある全ての要素に対して繰り返し処理が行われています。
そのため、多次元配列の要素のキーと値が全て表示されています。
3次元配列の場合
3次元配列にforeach文を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php echo '⚫︎ 対象の3次元配列'; $colors = [ [['紫', '桃', '紺', '白'],['黒','赤', '青', '黄']], [['緑', '橙', '灰', '茶'],['黄緑', '水', '銀', '金']] ]; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key1 => $colors1) { foreach($colors1 as $key2 => $colors2) { foreach($colors2 as $key => $color) { echo "$key: $color"; echo "\n"; } echo "\n"; } } ?> |
実行結果
foreach文の中にforeach文を、さらにその中にforeach文を使用することで、3次元配列の中にある全ての要素に対して繰り返し処理が行われています。
そのため、こちらも多次元配列の要素のキーと値が全て表示されています。
foreach文で配列の数に合わせて繰り返し処理を行う場合
foreach文はlist()を使用することで、配列の数に合わせて繰り返し処理を行うことができます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php echo '⚫︎ 対象の配列'; $colors = [ ['向日葵', '山吹', '鬱金', '藤黄'], ['青竹', '常盤', '木賊', '深緑'], ['本紫', '葡萄', '深紫', '紫黒'] ]; print_r($colors); echo '⚫︎ foreach文使用後'; foreach ($colors as list($color1, $color2, $color3, $color4)) { echo "カラー1: $color1; カラー2: $color2; カラー3: $color3; カラー4: $color4;"; echo "\n"; } ?> |
実行結果
list()を使用することで、配列の数に合わせて繰り返し処理が行われています。
そのため、2次元配列の中にある1次元配列がそのまま繰り返して表示されています。
for文とforeach文の違い
foreach文は、for文の配列版みたいなものです。
そのため、for文とforeach文に大きな違いはありませんが、唯一違いがあるとすれば回数を指定するかしないかです。
例えば、配列の要素を取り出して処理を行うコードをforeach文で実装すると下記のようなコードになります。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 | <?php echo '⚫︎ 対象の配列'; $colors = ['臙脂', '茜色', '朱・緋あけ', '紅海老茶', '蘇芳', '真紅しんく']; print_r($colors); echo '⚫︎ foreach文使用後'; foreach($colors as $key => $color) { echo "$key: $color"; echo "\n"; } ?> |
実行結果
foreach文で指定した配列の要素のキーや値を取り出して処理が行われています。
続いてfor文を使って先ほどの処理を行うと、下記のようなコードになります。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php echo '⚫︎ 対象の配列'; $colors = ['臙脂', '茜色', '朱・緋あけ', '紅海老茶', '蘇芳', '真紅しんく']; print_r($colors); echo '⚫︎ for文使用後'; $length = count($colors); $cnt = 0; for($i = 0; $i < $length; $i++) { $color = $colors[$i]; $cnt = $cnt + 1; echo "$cnt: $color"; echo "\n"; } ?> |
実行結果
for文によってこちらも配列の要素を取り出してそれぞれに処理が行われています。
しかし、for文の場合は条件式次第で繰り返し処理が動くため、配列の長さを取得する処理が必要があります。
foreach文だと、配列内にある全ての要素に対して処理が行われますが、for文だと条件式次第で処理が決まるので、全ての要素に対して処理が行われるかどうかはコード作成者次第になります。
そのため、配列の全ての要素に対して確実に処理を行いた場合はforeach文を使用するようにしましょう。
まとめ
⚫︎ foreach文とは、指定した配列のそれぞれの要素に対して、処理を行う文法である
⚫︎ foreach文は、要素の値のみを取り出す書き方と要素のキーと値の両方を取り出す書き方の2つがある
⚫︎ foreach文にif文を使用すると、繰り返し処理が条件によって分岐する
⚫︎ foreach文にbreakを使用すると、繰り返し処理を強制終了する
⚫︎ foreach文にconthnueを使用すると、繰り返し処理をスキップする
⚫︎ foreach文にswitch文を使用すると、繰り返し処理が条件によって多岐分岐する
⚫︎ foreach文を多次元配列に対して使用する場合はネストにする
⚫︎ foreach文で配列の数に合わせて繰り返し処理を行う場合はlist()を使用する
⚫︎ for文とforeach文の違いは回数を指定するかしないかである
(配列で繰り返し処理を行うならforeach文が良い)