phpでのforeach文の使い方|連想配列での使い方や参照渡しの方法も紹介

- システム
エンジニア - phpでforeach文はどのような時に使いますか。
- プロジェクト
マネージャー - 配列や連想配列などの繰り返し処理で使います。
phpでのforeach文の使い方とは?
今回は、phpでのforeach文の使い方について説明します。配列などの繰り返し処理でforeach文を使用します。
phpでのforeach文の使い方に興味のある方はぜひご覧ください。
基本的な使い方
phpでのforeach文の基本的な使い方を紹介します。ここでは、配列に対してforeach文を使用します。
実際のソースコードを見てみましょう。
1 2 3 4 5 |
$my_array = array("item1", "item2", "item3", "item4", "item5"); // 配列の要素を出力 foreach($my_array as $value){ echo $value . "\n"; } |
実行結果は以下のようになります。
1 2 3 4 5 |
item1 item2 item3 item4 item5 |
連想配列での使い方
phpのforeach文は連想配列に対しても使用できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
$my_array = array("key1" => "value1", "key2" => "value2", "key3" => "value3", "key4" => "value4", "key5" => "value5"); // 連想配列の要素を出力 foreach($my_array as $key => $value){ echo "key:" . $key . ", value:" . $value . "\n"; } // valueのみを取得 foreach($my_array as $value){ echo "value:" . $value . "\n"; } |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
key:key1, value:value1 key:key2, value:value2 key:key3, value:value3 key:key4, value:value4 key:key5, value:value5 value:value1 value:value2 value:value3 value:value4 value:value5 |
keyとvalueのセットを取得できます。
valueのみを取得することもできます。
このように、phpのforeach文は連想配列に対しても使用できます。
indexの取得
phpのforeach文では、配列のインデックスを取得することもできます。
実際のソースコードを見てみましょう。
1 2 3 4 5 |
$my_array = array("item1", "item2", "item3", "item4", "item5"); // 配列の要素を出力 foreach($my_array as $index => $value){ echo "index:" . $index . ", value:" . $value . "\n"; } |
実行結果は以下のようになります。
1 2 3 4 5 |
index:0, value:item1 index:1, value:item2 index:2, value:item3 index:3, value:item4 index:4, value:item5 |
このように、phpのforeach文では配列のインデックスを取得することもできます。
最初と最後の要素に対する処理
phpのforeach文では、最初と最後の要素に対して処理できます。resetやendメソッドを使用します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$my_array = array("item1", "item2", "item3", "item4", "item5"); // 配列の要素を出力 foreach($my_array as $value){ if ($value === reset($my_array)) { // 最初 echo "first: " . $value . "\n"; } if ($value === end($my_array)) { // 最後 echo " last: " . $value . "\n"; } } |
実行結果は以下のようになります。
1 2 |
first: item1 last: item5 |
配列の最初と再度の要素に対して処理していることが分かります。
このように、phpのforeach文では最初と最後の要素に対して処理できます。
参照渡し
phpでは、$value に &(アンパーサンド)を不可することで、foreach文で参照渡しができます。ただし、不用意に使っていると、予期せぬ不具合を混入させる可能性があります。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 |
$my_array = array("item1", "item2", "item3", "item4", "item5"); var_dump($my_array); foreach($my_array as &$value){ $value = "item"; } $value = "hoge"; // これが不具合を混入する原因 var_dump($my_array); |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
array(5) { [0]=> string(5) "item1" [1]=> string(5) "item2" [2]=> string(5) "item3" [3]=> string(5) "item4" [4]=> string(5) "item5" } array(5) { [0]=> string(4) "item" [1]=> string(4) "item" [2]=> string(4) "item" [3]=> string(4) "item" [4]=> &string(4) "hoge" } |
最後の要素が予期せず変更されています。これを回避するには、foreachの外でunsetします。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
$my_array = array("item1", "item2", "item3", "item4", "item5"); var_dump($my_array); foreach($my_array as &$value){ $value = "item"; } unset($value); $value = "hoge"; var_dump($my_array); |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
array(5) { [0]=> string(5) "item1" [1]=> string(5) "item2" [2]=> string(5) "item3" [3]=> string(5) "item4" [4]=> string(5) "item5" } array(5) { [0]=> string(4) "item" [1]=> string(4) "item" [2]=> string(4) "item" [3]=> string(4) "item" [4]=> string(4) "item" } |
このように、phpのforeach文で参照渡しする場合は注意が必要です。
continue
phpのforeach文では、continueでループをスキップできます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 |
$my_array = array("item1", "item2", "item3", "item4", "item5"); // 配列の要素を出力 foreach($my_array as $value){ if ( $value == 'item3' ) { continue; } echo $value . "\n"; } |
実行結果は以下のようになります。
1 2 3 4 |
item1 item2 item4 item5 |
このように、phpのforeach文では、continueでループをスキップできます。
break
phpのforeach文では、breakでループを中断できます。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 |
$my_array = array("item1", "item2", "item3", "item4", "item5"); // 配列の要素を出力 foreach($my_array as $value){ if ( $value == 'item3' ) { break; } echo $value . "\n"; } |
実行結果は以下のようになります。
1 2 |
item1 item2 |
このように、phpのforeach文では、breakでループを中断できます。
- システム
エンジニア - foreach文で参照渡しができるのですね。
- プロジェクト
マネージャー - 参照渡しで使用する場合は注意が必要です。回避するにはforeachの外でunsetする必要があります。
まとめ
いかがでしたでしょうか。phpでのforeach文の使い方について、紹介しました。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅)遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅)病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅)開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)