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
-