PHPで配列を繰り返し処理する方法を初学者向けに解説します。
繰り返し処理はPHPに限らず最も重要な制御ロジックの一つで、これを使わないプログラムは皆無と言っていいでしょう。特に複数のデータを格納している配列においては繰り返し処理の知識は必須で、プログラミング言語ごとに様々な処理メソッドが用意されています。
これらを使いこなせるかどうかでプログラムの処理速度に大きく影響するのでよく覚えておくと良いでしょう。
目次
配列(Array)の基礎知識
まずPHPにおける配列の基礎知識について学びましょう。PHPに限った話ではありませんが、配列には1要素ずつ含む通常の配列とKeyとValueのセットでデータを管理する連想配列とがあります。
配列の基本形1([ ]で初期化)
通常の配列の初期化は2通りあります。1つは以下のように[ ]で括って初期化する方法です。
1 |
$member = ["鈴木", "佐藤", "山田", "渡辺", "池田", "田中"]; |
1番目の要素番号は0で、以下のように記述すれば参照できます。
1 2 |
echo $member[0]; //鈴木 |
配列の基本形1(Array関数で初期化)
2つ目の方法としてArray関数を使う方法です。以下のように初期化します。
1 |
$member = array("鈴木", "佐藤", "山田", "渡辺", "池田", "田中"); |
[ ]初期化の時と同じく[ ]内に要素番号を指定して参照できます。
1 2 |
echo $member[0]; //鈴木 |
連想配列
次にKeyとValueとの対から成る連想配列についてです。
初期化は通常の配列と同様に[ ]内での初期化とArray関数を使う2通りあります。(各人の年齢を表現しているつもりです。) 名前がKey、年齢がValueという関係です。
1 2 |
$member = ["鈴木"=>42, "佐藤"=>38, "山田"=>32, "渡辺"=>26, "池田"=>52, "田中"=>45]; $member = array("鈴木"=>42, "佐藤"=>38, "山田"=>32, "渡辺"=>26, "池田"=>52, "田中"=>45); |
出力方法はKeyを指定することでValueを表示させることができます。
1 2 |
echo $member["鈴木"]; //42 |
以上がPHPにおける配列の基本です。これらを踏まえ配列の繰り返し処理について学んで行きましょう。
配列の繰り返し処理(foreach)の基本
PHPでは、配列の繰り返し処理はforeachを使って行います。
構文はこちらです。
配列変数から1個ずつ要素を取り出してas以下の変数に代入されます。配列の要素数分だけ繰り返されます。
以下が例になります。$memberに格納されたデータがforeach内で順番に読み込まれecho関数によって出力されます。
1 2 3 4 5 |
$member = array("鈴木", "佐藤", "山田", "渡辺", "池田", "田中"); foreach ($member as $value) { echo $value. "\n"; } |
こちらが出力した結果です。$memberに格納されたデータが順番に表示されていることがわかるかと思います。
1 2 3 4 5 6 |
鈴木 佐藤 山田 渡辺 池田 田中 |
これが配列の繰り返し処理の基本です。
繰り返し処理中にindexを取得する方法
繰り返し処理中にindex番号を取得したい場合があります。
よくやりがちな方法として、indexデータを持つ変数を別途用意して繰り返し処理の中でインクリメントしながら出力させる方法です。けっして間違った方法ではありませんがPHPではもっと便利な方法が用意されています。
1 2 3 4 5 6 7 8 |
// (非推奨)インデックスを付与する方法 $member = array("鈴木", "佐藤", "山田", "渡辺", "池田", "田中"); $index=0; foreach ($member as $value) { echo $index ." : ". $value. "\n"; $index++; } |
PHPではわざわざ変数をインクリメントすることなく、以下の方法で実現できます。
1 2 3 4 5 6 |
//(推奨)インデックスを付与する方法 $member = array("鈴木", "佐藤", "山田", "渡辺", "池田", "田中"); foreach ($member as $index => $value) { echo $index ." : ". $value. "\n"; } |
上記の出力結果は以下の通りです。たしかにindex番号が出力できました。どちらも結果は変わりありませんが後者の方が少ない行数で実現できるのでおすすめします。
1 2 3 4 5 6 |
0 : 鈴木 1 : 佐藤 2 : 山田 3 : 渡辺 4 : 池田 5 : 田中 |
foreach中に連想配列のキーと値を取り出す
次に、連想配列における繰り返し処理の方法について解説します。連想配列の場合の記述方法は、前述のインデックスを出力する構文に似ています。構文は以下のように、配列変数からキーと値の対を取り出し変数に格納することで、順番にキーと値を出力することができるわけです。
以下が例になります。$memberに格納されたデータがforeach内で順番に読み込まれecho関数によってキーと値とが出力されます。
1 2 3 4 5 |
$member = array("鈴木"=>42, "佐藤"=>38, "山田"=>32, "渡辺"=>26, "池田"=>52, "田中"=>45); foreach ($member as $key => $value) { echo $key ." : ". $value. "\n"; } |
こちらが出力した結果です。$memberに格納されたキーと値とが順番に表示されていることがわかるかと思います。
1 2 3 4 5 6 |
鈴木 : 42 佐藤 : 38 山田 : 32 渡辺 : 26 池田 : 52 田中 : 45 |
foreach内で連想配列の要素を削除する方法
今度は連想配列の中の特定の要素を削除する方法についてです。要素の削除はunset関数を使えば実現できます。以下のようにKeyを指定すればその要素が削除されます。
1 2 |
$member = array("鈴木"=>42, "佐藤"=>38, "山田"=>32, "渡辺"=>26, "池田"=>52, "田中"=>45); unset($member["山田"]); //3つ目の要素が削除される |
もし削除したい要素が存在するかどうかわからない場合などは、foreach処理内でキーを探すことで削除できます。
1 2 3 4 5 |
$member = array("鈴木"=>42, "佐藤"=>38, "山田"=>32, "渡辺"=>26, "池田"=>52, "田中"=>45); foreach( $member as $key => $value ){ if( $key === '山田' ) unset($member[$key]); } |
foreach中に取得した要素の隣の要素を取得する方法
繰り返し処理の中でしばしば次の要素を取得したいケースがあります。その場合は$member[$index+1]と、インデックスを1加えて参照することも可能です。しかし、PHPにはnext関数が用意されていて、これを使う方で効率的です。
以下は次の要素と同じ場合に「次と重複」と付記するプログラムになっています。
1 2 3 4 5 6 7 |
$member = array("鈴木", "佐藤", "山田", "山田", "池田", "田中"); foreach ($member as $value) { echo $value; if($value==next($member)) echo ":次と重複"; echo "\n"; } |
結果はご覧のとおりです。
1 2 3 4 5 6 |
鈴木 佐藤 山田:次と重複 山田 池田 田中 |
まとめ
いかがでしょうか。今回は、PHPにおける配列のforeach処理についてご紹介しました。
繰り返し処理はプログラミングの中で最も重要な仕組みの1つですが、効率を考えずにプログラムを組むと処理時間に大きく影響するので注意が必要です。プログラム言語で用意されている機能をうまく使いこなすことで効率的なプログラムを心がけていきましょう。