PHPのforeachで配列処理(HTML埋め込みでもスッキリな書き方も)

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

プログラミングの配列処理は初心者には敷居が高いですね。私も苦労した覚えがあります。

ただPHPで配列を処理する場面は多く、必須のスキルとなるため頑張って覚えていただきたいと思います。

foreach()を使った配列処理を初心者の方にも理解できるよう、できるだけ分かりやすくお伝えします。

 

foreachの基本的な構文

添字配列をforeachする書き方

横浜市 大阪市 福岡市

添字配列のforeachの構文

foreach (配列変数 as 配列変数から取り出した値を格納する変数) {
繰り返す処理;
}

参考:PHPの変数でムダを省き、効率良くコーディングする方法

添字配列をforeachしたときの処理

以下の例では、変数$citiesに格納された3つの都市を、foreach()で一つずつ取り出し、変数$cityにコピーしたものを表示させています。

横浜市 大阪市 福岡市

上記の例だと、以下のように処理されます。

 

  1. 配列が格納された変数$citiesforeach()の左側にセット
  2. foreach()の右側には、一つずつ取り出した時の変数$cityを宣言
    foreach()の右側の変数はなんでも良いが、複数形の配列変数に対し、単数形の変数名にすることが多いです。
    例)$prefs as $pref、$songs as $song、$foods as $foodなど(「$value」などもよく使われます。)
  3. foreach()の左側と右側にセットした変数の間にasと書く
  4. 配列$citiesで配列の最初にある値(ここでは横浜)がコピーされ、変数$cityに格納される
  5. echo $cityで出力される
    .'市'を付け足し、◯◯市となるようにしています。)
  6. 配列にはまだ2つの値が残っているので、また最初に戻り繰り返す
  7. 配列$citiesに残された大阪が次にコピーされ、変数$cityに上書きコピーされる
  8. 横浜の次に出力される
  9. 配列にはもう1つの値が残されているので、最初に戻り繰り返す
  10. 配列$citiesに残された最後の都市福岡が取り出され、変数$cityに上書きコピーされる
  11. 大阪の次に出力される
  12. 配列は全部処理したので、自動的に繰り返処理を終了してくれる

 

foreach()が便利なのは、for()while()と違って、対象が空になったら自動的に処理を終了してくれるところです。

参考:PHPのfor文で繰り返し処理(HTML埋め込みでもスッキリな書き方も)

連想配列の処理

foreach()は連想配列も処理できます。

キーと値をそれぞれ処理できるため、より複雑な処理が可能です。

連想配列でのforeachの書き方

・1東京都・2大阪府・3愛知県

参考:PHPの連想配列にセットする方法とさらに追加する方法

連想配列でのforeachの構文

foreach (配列変数 as キーを格納する変数 => 値を格納する変数) {
繰り返す処理;
}

連想配列でのforeachの処理

以下の例では、変数$prefsに連想配列で格納された3つの都府県をforeach()で取り出し、キーは変数$keyに、値は変数$valにそれぞれ格納し、$key$valを1セットにして、1セットずつ出力しています。

・1東京都 ・2大阪府 ・3愛知県

ループ処理中に特定の値をスキップする

ループ処理中に配列の中で不要な値はスキップしたい時に便利なのがcontinue文です。

if文でスキップしたい値を指定して、該当する値のみ条件分岐でcontinueさせます。

詳しくは以下ページでご紹介しています。

continue文で特定の値をスキップする

特定の値でループ処理を終了させる

ループ処理中に配列の中の特定な値が出てきたら、その時点で処理を終了させる時にはbreak文が便利です。

if文で処理を終了させたい値を指定して、該当する値以降はbreakにより出力されません。

詳しくは以下ページでご紹介しています。

break文でループ処理を終了させる

配列のNULLチェックでエラーを回避

foreach()で下記のようなエラーが出てハマったことがありますが、みなさんも経験ありませんか?

Warning: Invalid argument supplied for foreach() in…

これは配列がnull、つまり配列が無いためループ処理ができないというエラーです。

以下の2つの方法でエラーを回避しましょう。

配列キャストによるエラー回避

foreach()の最初に、配列にキャスト(型変換)する(array)を入れており、エラーは出ません。

 

  1. nullだとエラーになる
  2. (array)で配列にキャストし、空の配列にする
  3. 空の配列はnullではないためエラーにはならない

参考:空文字とNULLの違いは?

ただ、この方法では、何も出力されないため画面は真っ白のままです。

ユーザーには何が起きたか理解できないでしょう。

思わぬ例外をとりあえず回避するには使えるかもしれませんね。

条件分岐でエラーメッセージを出す

is_array()で配列かどうかをはんていできるので、if文で条件分岐させています。

 

  1. is_array()で変数$citiesが配列かif文で条件分岐
  2. 配列だったらforeach()でループ処理
  3. 配列じゃなかったらエラーメッセージを表示

ユーザーが空の条件を指定しそうなケースだったら、この方法が親切でしょう。

 

PHPのエラーを本番環境で表示させるのは避けたいですし、HTML表示が崩れる場合もあるので、適切なエラー処理を行いましょう。

endforeachの書き方でHTML埋め込みもスッキリ!

連想配列のforeach()は都道府県などのプルダウンメニュー作成に便利ですね。

HTMLに埋め込んで書くことを想定して、endforeachを使った別の書き方でスッキリしたコードに仕上げました。

}(波カッコ)の閉じ忘れやネストエラーを防ぐこともできますし、可読性に優れるため、オススメです。

{ }(波カッコ)を使わない代わりに、:(コロン)を付け、一番最後にendforeachを付けます。

endforeach以外は;(セミコロン)は不要です。

HTMLに埋め込むとソースが汚くなりがちですが、これでだいぶスッキリと書くことができますね。

参考:PHPでif文(HTML埋め込みでもスッキリな書き方も)

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*