php

【php】foreach文の基礎やbreakとcontinueの使い方を初心者向けに徹底解説!

foreach文

 

今回は、phpの制御構文の一つである「foreach文」ついて初心者向けにやさしく解説します。

 

foreach文は、while文やfor文などの繰り返し文とは違い

指定した「配列」の中身を順番に取り出して「処理」を行うことができます。

処理の内容は自由に記述することができ、例えば次のようなことに使用します。

  • データベースの情報から、記事一覧商品一覧を作成する
  • 単に情報を羅列する

また、配列の中身の数だけ繰り返し処理を行うので、break文などの終了命令を記述する必要がないといった特徴があります。

配列とオブジェクトにしか使えませんが、使いこなせるようになると非常に便利な構文なので、ぜひこの記事を読んで基礎を学んでいって下さいね。

 

この記事では

foreach文の使い方を「配列」や「連想配列」を使って、イラストや動画を交え初学者の方に向けて優しく解説します。

 

できるだけわかりやすく解説するので、ぜひ最後まで読んでみて下さいね!

目次

foreach文の基本的な使い方foreach文の連想配列foreach文を中断するbreak文
繰り返しをスキップするcontinue文多次元配列を分割代入する

 📖目次に戻る

foreach文の基本的な使い方

foreach文は、指定した「配列」に対し、順番に「繰り返し処理」を行うことができます。

構文 その1

foreach( 配列型の変数  as  値変数 ) {

  // 実行する処理 ;

}

配列型の変数を「as」の左側に、値変数(配列の要素が入る変数)を「as」の右側に記述します。

「要素」とは配列の中身のことです。

「値変数」と事項で説明する「キー変数」は「仮変数」とも言い、配列から取り出したキーや値を一時的に格納する変数です。

 

値変数の名前は、実行する処理の中に記述する変数名と同じであれば何でも良いよ。(もちろん命名規則は守ってね)

 

それでは実際に確認してみましょう。

配列$fruits」の中身を、値変数$fruit」に入れて、順番にechoで出力します。

 </>php

<?php

$fruits = [ 'apple' , 'melon' , 'banana'];

foreach( $fruits as $fruit ){

  echo $fruit;

  echo '<br />';

} ?>

配列「$fruits」が用意していた変数「$fruit」に入り、繰り返し処理によって一つずつ「echo $fruit;」で出力されていますね。

ちなみに、配列型の変数が仮変数に入っても、配列の要素をコピーして変数に入れているので、配列そのものには影響ありません。

また、配列の要素の数だけ繰り返されるので、for文やwhile文と違いbreak命令を記述する必要がありません。(使用することもできます。使用例はコチラ

 

for文に書き換えてみよう

count関数を使用することで、foreach文をfor文に書き換えることもできます。

構文

count( 配列型の変数 )

「count関数」配列の要素数を返す関数だよ。

それでは前項のforeach文をfor文に書き換えてみましょう。

 </>php

<?php

$fruits = ['apple' , 'melon' , 'banana'];

for( $i = 0 ; $i < count($fruits) ; $i++ ){

  echo $fruits[$i];

  echo '<br />';

} ?>

前項でfor文の出力結果と同じですね。

配列「$fruits 」の要素数は「」なので、for文の条件式「$i < count( $fruits )」は「$i < 3」と同じ意味になります。

よって、$fruits[0]のapple、$fruits[1]のmelon、$fruits[2]のbananaが順番に出力されます。

 

配列の要素が空だった場合は一度も処理は実行されないよ。

 📖目次に戻る

foreach文の連想配列

foreach文は、キーと値がペアになった連想配列に対しても順番に「繰り返し処理」をすることができます。

構文

foreach ( 配列型の変数  as キー変数 =>  値変数 ) {

  // 実行する処理 ;

}

基本的なforeach文と比べて「要素のキーが入る変数 」の記述が増えましたね。

 

キー変数の名前も、実行する処理の中に記述する変数名と同じだったら何でも良いよ。(もちろん命名規則は守ってね)

 

それでは実際に確認してみましょう。

今度はキーのついた連想配列$fruits」の中身を、キー変数$key」と値変数$fruit」に入れて、順番にechoで出力します。

 </>php

<?php

$fruits = [ '赤い' => 'apple' , '緑の' => 'melon' , '黄色の' => 'banana' ];

foreach( $fruits as $key => $fruit ){

  echo $key . $fruit;

  echo '<br />';

} ?>

「値」と「キー」の3組全てのペアが順番に出力されていますね。

 

配列のindexを取得する

キーの設定されていない普通の配列に対し、先ほどの連想配列を取得するforeach文を使用するとどうなるでしょう?

「キーが設定されてません!」とエラーを吐くと思いますか?

実は配列のインデックス(何番目の要素なのか)を取得することができます。確認してみましょう。

 </>php

<?php

$fruits = ['apple' , 'melon' , 'banana'];

foreach( $fruits as $key => $fruit ){

  echo $key . '番目のフルーツは' . $fruit;

  echo '<br />';

}

?>

順番にインデックスを取得することができましたね。

ポイント

取得したインデックス番号は0番目から始まっています。

1番目から表示したい場合は、( $key+1 )と記述するなどの工夫が必要なので注意しましょう。

 

 📖目次に戻る

foreach文を中断する break文

break文は、foreach文などの繰返し処理を中断することができます。

foreach文の中断

今までの例文では配列の要素を順番に表示しましたが、今度は「break文」を使って配列の2つ目の要素「melon」を出力した時点で処理を中断してみましょう。

 </>php

<?php

$fruits = [ 'apple' , 'melon' , 'banana' ];

foreach( $fruits as $fruit ){

  echo $fruit;

  echo '<br />';

  if( $fruit === 'melon' ){

  break;

  }

} ?>

繰り返し処理の中に、変数「$fruit」が「melon」と等しくなった場合「break」を実行するようなif文を記述しています。

foreach文のbreak文

「melon」が出力された時点で処理が止まっていることが確認できますね。

 

ちなみにbreak文は、if文やswitch文などの他の制御構文でも使用することができるよ。

 📖目次に戻る

繰り返しをスキップする continue文

continueは、「ある条件に合致した時だけ」処理をスキップすることができます。

foreach文とcontinue

今度は、フルーツの数を8個に増やしました。

この中から「melon」だけをスキップして残りの要素を全て出力してみましょう。

 </>php

<?php

$fruits = ['apple', 'melon', 'banana', 'melon', 'grape', 'melon', 'peach', 'melon'];

foreach( $fruits as $fruit ){

  if( $fruit === 'melon'){

    continue;

  }

  echo $fruit;

  echo '<br />';

} ?>

繰り返し処理の中に、変数「$fruit」が「melon」と等しくなる場合「continue」を実行し処理をスキップするようなif文を記述しました。

foreach文のcontinue

「melon」以外の要素が出力されていますね。

 

特定の条件の時だけループをスキップすることは意外とよく使うので、覚えておくと便利だね。

 📖目次に戻る

foreach文を使った分割代入

分割代入とは、配列などの1つの変数に複数の要素が入っている変数を分解して、個々の変数に代入することです。

分割代入

例文

$fruits = ['apple','melon','banana'];

[$a,$b,$c] = $fruits;  //ここで個々の変数に分割代入しています

echo $a .'<br />';

echo $b .'<br />';

echo $c .'<br />';

配列の要素数だけ用意した変数を [](ブラケット)で囲み、配列を代入しています。

 

多次元配列を分解して出力する

foreach文は分割代入と組み合わせて、多次元配列を分解して出力することもできます。

 </>php

<?php

$fruits = [

  ['赤色', 200, 'apple'],

  ['緑色', 1000, 'melon'],

  ['黄色', 100, 'banana'],

];

foreach ( $fruits as [ $color , $price , $fruit ]){

  echo "色は{$color}で、値段は{$price}円の{$fruit}";

  echo '<br />';

} ?>

配列の要素の数が3つなので、foreach文の「as」の後ろで3つの変数を用意し、[] (ブラケット)で囲んでいます。

foreach文の処理の中で、配列の3つの要素がそれぞれ変数「$color」「$price」「$fruit」に分割されて、代入されていますね。

 

連想配列を分解して出力する

同様に、連想配列を分解して出力することもできます。

先ほどの多次元配列を連想配列に置き換えて、foreach文も書き換えてみましょう。

 </>php

<?php

$fruits = [

  ['color' => '赤色' , 'price' => 200 , 'fruit' => 'apple'],

  ['color' => '緑色' , 'price' => 1000 , 'fruit' => 'melon'],

  ['color' => '黄色' , 'price' => 100 , 'fruit' => 'banana'],

];

foreach ( $fruits as [ 'color' => $color , 'price' => $price , 'fruit' => $fruit ]){

  echo "色は{$color}で、値段は{$price}円の{$fruit}";

  echo '<br />';

} ?>

連想配列に合わせて、foreach文の[](ブラケット)内でも、キーと値の形式で記述しています。

 

連想配列から新たな配列を作成する

分割代入を利用することで、連想配列から取り出した特定のキーを利用して、新たな配列を生成することもできます。

先ほど利用した連想配列から、キー「color」だけを取り出して新たな配列を生成してみましょう。

 </>php

<?php

$fruits = [

  ['color' => '赤色' , 'price' => 200 , 'fruit' => 'apple'],

  ['color' => '緑色' , 'price' => 1000 , 'fruit' => 'melon'],

  ['color' => '黄色' , 'price' => 100 , 'fruit' => 'banana'],

];

$colors = [];

foreach ( $fruits as $color ){

  ['color' => $colors[] ] = $color;

}

print_r($colors); ?>

配列「$fruits 」のキー「color」のみで新たな配列「$colors」が生成されました。

繰り返し処理の中では、仮変数「$color」から、キー「color」の値を取り出して新たな配列「$colors」に代入してます。

 

説明がカラフルになっちゃた。。。逆にわかりにくかったらゴメンね。

 📖目次に戻る

最後に

いかがでしたでしょうか、今回はphpの基本である制御構文の「foreach文」について解説しました。

もっと詳しく学習したい方は、下の記事一覧から他の記事もご覧下さい。

php

phpの基本文法と基礎テクニックについて初心者向けに解説しているよ!!  

続きを見る

最後までお読みいただき、ありがとうございました!

-php
-