[PHP]forやforeachを使った繰り返し処理の徹底解説|繰り返し処理を使いこなせるようになろう!
          
- システム
エンジニア - 繰り返し処理にもさまざまな関数がありますが、どんなことに注意すればいいのでしょうか?
 
- プロジェクト
マネージャー - どれも「なんとなく」で使うと意図しない不具合が生じるので、それぞれの特徴を詳しく見ていきましょう。
 
[PHP]forやforeachを使った繰り返し処理の徹底解説

            今回は、PHPでのforやforeachを使った繰り返し処理について説明します。基本的な使い方から、配列や連想配列の繰り返し処理、continueやbreak、HTMLの繰り返し処理について紹介します。
PHPでのファイル名取得に興味のある方はぜひご覧ください。
            
基本的な使い方
PHPのfor文の基本的な使い方を紹介します。実際のソースコードを見てみましょう。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                        
                          8
                         
                        
                          9
                         
                        
                          10
                         
                        
                          11
                         
                        
                          12
                         
                        
                          13
                         
                        
                          14
                         
                       | 
                    
                       
                          echo "インクリメント\n";
                         
                        
                          for ($i = 1; $i <= 10; $i++) {
                         
                        
                              echo "$i\n";
                         
                        
                          }
                         
                        
                          echo "2ずつ加算\n";
                         
                        
                          for ($i = 1; $i <= 10; $i+=2) {
                         
                        
                              echo "$i\n";
                         
                        
                          }
                         
                        
                          echo "デクリメント\n";
                         
                        
                          for ($i = 10; $i > 0; $i--) {
                         
                        
                              echo "$i\n";
                         
                        
                          }
                         
                       | 
                  
実行結果は以下のようになります。
| 
                       
                          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
                         
                        
                          28
                         
                       | 
                    
                       
                          インクリメント
                         
                        
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                        
                          8
                         
                        
                          9
                         
                        
                          10
                         
                        
                          2ずつ加算
                         
                        
                          1
                         
                        
                          3
                         
                        
                          5
                         
                        
                          7
                         
                        
                          9
                         
                        
                          デクリメント
                         
                        
                          10
                         
                        
                          9
                         
                        
                          8
                         
                        
                          7
                         
                        
                          6
                         
                        
                          5
                         
                        
                          4
                         
                        
                          3
                         
                        
                          2
                         
                        
                          1
                         
                       | 
                  
このように、PHPではfor文を使って繰り返し処理ができます。
配列
PHPでの配列に対する繰り返し処理を紹介します。実際のソースコードを見てみましょう。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                        
                          8
                         
                        
                          9
                         
                        
                          10
                         
                        
                          11
                         
                        
                          12
                         
                        
                          13
                         
                        
                          14
                         
                       | 
                    
                       
                          // 配列の宣言
                         
                        
                          $color = ['red', 'green', 'blue', 'yellow', 'black'];
                         
                        
                          // forで繰り返し処理
                         
                        
                          // countは事前に実施しておくべき
                         
                        
                          $count = count($color);
                         
                        
                          for ($i = 0 ; $i < $count; $i++){
                         
                        
                            echo "$color[$i]\n";
                         
                        
                          }
                         
                        
                          // foreachで繰り返し処理
                         
                        
                          foreach($color as $value){
                         
                        
                            echo "$value\n";
                         
                        
                          }
                         
                       | 
                  
実行結果は以下のようになります。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                        
                          8
                         
                        
                          9
                         
                        
                          10
                         
                       | 
                    
                       
                          red
                         
                        
                          green
                         
                        
                          blue
                         
                        
                          yellow
                         
                        
                          black
                         
                        
                          red
                         
                        
                          green
                         
                        
                          blue
                         
                        
                          yellow
                         
                        
                          black
                         
                       | 
                  
for文のcountはループの前に実行しておくようにしましょう。for文の中に記述すると、ループのたびにcountを計算するので、無駄なロジックが発生します。for文よりもforeach文の方が処理がシンプルです。
2次元配列の繰り返し処理を紹介します。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                        
                          8
                         
                        
                          9
                         
                        
                          10
                         
                        
                          11
                         
                        
                          12
                         
                        
                          13
                         
                        
                          14
                         
                        
                          15
                         
                       | 
                    
                       
                          $array = [
                         
                        
                              [1, 2, 3, 4, 5],
                         
                        
                              ["a", "b", "c", "d", "e"],
                         
                        
                              ["one", "two", "three", "four", "five"]
                         
                        
                          ];
                         
                        
                          print_r($array);
                         
                        
                          // foreachで2次元配列の表示
                         
                        
                          foreach($array as $row){
                         
                        
                              foreach($row as $data){
                         
                        
                                  echo "$data ";
                         
                        
                              }
                         
                        
                              echo "\n";
                         
                        
                          }
                         
                       | 
                  
実行結果は以下のようになります。
| 
                       
                          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
                         
                        
                          28
                         
                        
                          29
                         
                        
                          30
                         
                        
                          31
                         
                        
                          32
                         
                        
                          33
                         
                       | 
                    
                       
                          Array
                         
                        
                          (
                         
                        
                              [0] => Array
                         
                        
                                  (
                         
                        
                                      [0] => 1
                         
                        
                                      [1] => 2
                         
                        
                                      [2] => 3
                         
                        
                                      [3] => 4
                         
                        
                                      [4] => 5
                         
                        
                                  )
                         
                        
                              [1] => Array
                         
                        
                                  (
                         
                        
                                      [0] => a
                         
                        
                                      [1] => b
                         
                        
                                      [2] => c
                         
                        
                                      [3] => d
                         
                        
                                      [4] => e
                         
                        
                                  )
                         
                        
                              [2] => Array
                         
                        
                                  (
                         
                        
                                      [0] => one
                         
                        
                                      [1] => two
                         
                        
                                      [2] => three
                         
                        
                                      [3] => four
                         
                        
                                      [4] => five
                         
                        
                                  )
                         
                        
                          )
                         
                        
                          1 2 3 4 5 
                         
                        
                          a b c d e 
                         
                        
                          one two three four five 
                         
                       | 
                  
このようにPHPでは、配列に対してfor文やforeach文で繰り返し処理ができます。
連想配列
PHPでの連想配列に対する繰り返し処理を紹介します。実際のソースコードを見てみましょう。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                       | 
                    
                       
                          // 連想配列の宣言
                         
                        
                          $color = ['red'=>'赤', 'green'=>'緑', 'blue'=>'青', 'yellow'=>'黄色', 'black'=>'黒'];
                         
                        
                          // foreachで繰り返し処理
                         
                        
                          foreach($color as $key => $value){
                         
                        
                          echo "key:$key, value:$value\n";
                         
                        
                          }
                         
                       | 
                  
実行結果は以下のようになります。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                       | 
                    
                       
                          key:red, value:赤
                         
                        
                          key:green, value:緑
                         
                        
                          key:blue, value:青
                         
                        
                          key:yellow, value:黄色
                         
                        
                          key:black, value:黒
                         
                       | 
                  
このようにPHPでは、連想配列に対して繰り返し処理ができます。
continue
繰り返し処理をスキップするcontinueについて紹介します。実際のソースコードを見てみましょう。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                       | 
                    
                       
                          for ($i = 1; $i <= 10; $i++) {
                         
                        
                              // iが5の場合にループをスキップ
                         
                        
                              if($i == 5){
                         
                        
                                  continue;
                         
                        
                              }
                         
                        
                              echo "$i\n";
                         
                        
                          }
                         
                       | 
                  
実行結果は以下のようになります。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                        
                          8
                         
                        
                          9
                         
                       | 
                    
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          6
                         
                        
                          7
                         
                        
                          8
                         
                        
                          9
                         
                        
                          10
                         
                       | 
                  
continueを使用することで、ループ処理がスキップされていることが分かります。
break
繰り返し処理を中断するbreakについて紹介します。実際のソースコードを見てみましょう。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                       | 
                    
                       
                          for ($i = 1; $i <= 10; $i++) {
                         
                        
                              // iが5の場合にループをスキップ
                         
                        
                              if($i == 5){
                         
                        
                                  break;
                         
                        
                              }
                         
                        
                              echo "$i\n";
                         
                        
                          }
                         
                       | 
                  
実行結果は以下のようになります。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                       | 
                    
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                       | 
                  
breakを使用することで、ループ処理が中断されていることが分かります。2次元配列に使用した場合は、当該ループを中断します。
HTML
PHPでのHTMLの繰り返し処理を紹介します。ここでは、tableの要素をforeachで出力します。実際のソースコードを見てみましょう。
| 
                       
                          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
                         
                       | 
                    
                       
                          <?php
                         
                        
                          $table= array(
                         
                        
                              array("a1", "a2", "a3"),
                         
                        
                              array("b1", "b2", "b3")
                         
                        
                          );
                         
                        
                          ?>
                         
                        
                          <html>
                         
                        
                          <head>
                         
                        
                          <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
                         
                        
                          <title></title>
                         
                        
                          </head>
                         
                        
                          <body>
                         
                        
                          <table border=1>
                         
                        
                              <?php foreach($table as $row){ ?>
                         
                        
                              <tr>
                         
                        
                                  <?php foreach($row as $cel){ ?>
                         
                        
                                      <td><?= $cel?></td>
                         
                        
                                  <?php } ?>
                         
                        
                              </tr>
                         
                        
                              <?php } ?>
                         
                        
                          </table>
                         
                        
                          </body>
                         
                        
                          </html>
                         
                       | 
                  
実行結果は以下のようになります。
| 
                       
                          1
                         
                        
                          2
                         
                        
                          3
                         
                        
                          4
                         
                        
                          5
                         
                        
                          6
                         
                        
                          7
                         
                        
                          8
                         
                        
                          9
                         
                        
                          10
                         
                        
                          11
                         
                        
                          12
                         
                        
                          13
                         
                        
                          14
                         
                        
                          15
                         
                        
                          16
                         
                        
                          17
                         
                        
                          18
                         
                        
                          19
                         
                        
                          20
                         
                        
                          21
                         
                        
                          22
                         
                       | 
                    
                       
                          <html>
                         
                        
                          <head>
                         
                        
                          <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
                         
                        
                          <title></title>
                         
                        
                          </head>
                         
                        
                          <body>
                         
                        
                          <table border=1>
                         
                        
                                  <tr>
                         
                        
                                              <td>a1</td>
                         
                        
                                              <td>a2</td>
                         
                        
                                              <td>a3</td>
                         
                        
                                      </tr>
                         
                        
                                  <tr>
                         
                        
                                              <td>b1</td>
                         
                        
                                              <td>b2</td>
                         
                        
                                              <td>b3</td>
                         
                        
                                      </tr>
                         
                        
                              </table>
                         
                        
                          </body>
                         
                        
                          </html>
                         
                       | 
                  
PHPの繰り返し処理がHTMLとして展開されていることが分かります。
- システム
エンジニア - Breakできない場合はfor文が有効なんですね。
 
- プロジェクト
マネージャー - 古いブラウザでは使用できない関数や順不同で処理してしまう関数もありますので、それぞれの特徴をしっかり覚えておきましょう。
 
まとめ
いかがでしたでしょうか。PHPでのforやforeachを使った繰り返し処理について説明しました。基本的な使い方から、配列や連想配列の繰り返し処理、continueやbreak、HTMLの繰り返し処理について紹介しました。
ぜひご自身でPHPのソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
          
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
          数多くのエンジニアが集まります。

- 
              
スマホアプリから業務系システムまで

スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
 - 
              
充実した研修制度

毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
 - 
              
資格取得を応援

スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
 - 
              
東証プライム上場企業グループ

オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
 
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
              まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

新着案件New Job
- 
              
              
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) - 
              
              
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) - 
              
              
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) - 
              
              
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) - 
              
              
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) - 
              
              
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅) 





