今回は、phpの制御構文の一つである「foreach文」ついて初心者向けにやさしく解説します。
foreach文は、while文やfor文などの繰り返し文とは違い
指定した「配列」の中身を順番に取り出して「処理」を行うことができます。
処理の内容は自由に記述することができ、例えば次のようなことに使用します。
- データベースの情報から、記事一覧、商品一覧を作成する
- 単に情報を羅列する
また、配列の中身の数だけ繰り返し処理を行うので、break文などの終了命令を記述する必要がないといった特徴があります。
配列とオブジェクトにしか使えませんが、使いこなせるようになると非常に便利な構文なので、ぜひこの記事を読んで基礎を学んでいって下さいね。
この記事では
foreach文の使い方を「配列」や「連想配列」を使って、イラストや動画を交え初学者の方に向けて優しく解説します。
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( 配列型の変数 )
それでは前項のforeach文をfor文に書き換えてみましょう。
</>php<?php
$fruits = ['apple' , 'melon' , 'banana'];
for( $i = 0 ; $i < count($fruits) ; $i++ ){
echo $fruits[$i];
echo '<br />';
} ?>
前項でfor文の出力結果と同じですね。
配列「$fruits 」の要素数は「3」なので、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文などの繰返し処理を中断することができます。
今までの例文では配列の要素を順番に表示しましたが、今度は「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文を記述しています。
「melon」が出力された時点で処理が止まっていることが確認できますね。
繰り返しをスキップする continue文
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文を記述しました。
「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言語に関する基礎的な構文やデータ型や関数など、詳細な解説やコード例を提供しています。
続きを見る