今回はPHPのforeach文について紹介します。大量にあるデータを配列から取り出す際によく使う繰り返し処理なので使いこなせるととても便利な構文です。

配列や連想配列が出てくるので少しとっつきにくいかもしれませんが、難しい構文ではないので一緒にマスターしましょう!

PHPのforeach文とは?

PHPのforeach文は配列のすべての要素に処理を実行する構文です。配列をまとめて処理をする時に使います。

PHPのforeach文の書きかた・使いかた

foreach(配列 as 変数) {
  繰り返す処理
}

while文やfor文とは違い終了する条件を記述しません。配列の全ての要素に対して処理が終われば自動的にforeach文から抜けるからです。

foreach文は「配列の全ての要素を処理するまで繰り返す」特殊な動きをします。

配列の反復処理をする

例えば動物の名前を格納した配列$animalsがあるとします。この配列の要素を出力する場合のコードを考えてみましょう!

$animals = ['イヌ', 'ネコ', 'ライオン', 'ウマ'];

foreach($animals as $animal) {
  echo $animal.'、';
}

実行すると「イヌ、ネコ、ライオン、ウマ」と表示され配列の4つ全ての要素に対してecho文が実行されたことがわかります。

foreach文で記述している$animalは配列の要素を格納するための新たに定義した変数です。

変数$animalにイヌ、ネコ、ライオン、ウマと順番に配列の要素が格納され繰り返し処理されていきます。

連想配列でPHPのforeach文を使おう!

連想配列を繰り返すforeach文の書きかた

もちろんforeach文は連想配列でも使えます。

記述方法はほとんど変わりませんが、キーと値の変数を忘れないように気をつけましょう!

foreach(配列 as キー => 値) {
  繰り返す処理
}
連想配列とは
連想配列は配列の要素にキー(key)と値(value)を持たせた配列です。配列と違い連想配列は値に名前をつけられるので管理が楽になる場合があります。

連想配列に対してfoeach文を実際に使ってみよう!

それでは実際に連想配列を繰り返し処理するforeach文を見ていきましょう!

連想配列$animals にキーとして英語、値として日本語を格納しforeach文を使って「dogは日本語でイヌです。」のように出力してみます。

$animals = [
  'dog' => 'イヌ',
  'cat' => 'ネコ',
  'lion' => 'ライオン',
  'horse' => 'ウマ'
];

foreach($animals as $english => $japanese) {
  echo $english.'は日本語で'.$japanese.'です。';
}

上記コードの連想配列は「dog」がキーにあたり「イヌ」が値です。foreach文ではキーに$english、値に$japaneseをそれぞれ変数として定義しています。そして、foreach文の処理の中ではそれぞれの変数を使用して「dogは日本語でイヌです。」となるようにecho文を記述しています。

foreach文の途中で処理をスキップできる

配列・連想配列の繰り返し処理の途中でforeach文を抜けたり、特定の要素のみ処理をスキップできたりします。

continue文

continue文はその要素の処理を途中で抜け、次の要素の繰り返し処理へとうつります。

例えば1~100までの数値を格納した配列$numbersから偶数の値のみを出力したいケースを考えてみましょう!

foreach($numbers as $number) {
  if($number % 2  !== 0) {
    continue;
  }
  ehco $number;
}

今回はforeahcの中で奇数の場合はcontinueの処理が実行されるif文を記述しました。奇数の場合はcontinueが実行された時点で次の配列の要素へと繰り返し処理がうつります。なのでecho文は実行されません。

割り算の余りを求める
先程のコードで$number % 2というコードがでてきました。%は割り算の余りを求める数式です。つまり$numberを2で割った時の余りを求めています。偶数は全て2で割り切れ余りは0ですが、奇数はそうではありません。値($number)%2 ==0は偶数であることを調べるためによく使いますので是非覚えておきましょう!

break文

break文はその時点で処理を終了しforeach文から抜けます。例えば1から100の数値を格納した配列$numbersに対して1から順に50まで出力するforeach文を考えてみます。

foreach($numbers as $number) {
  echo $number;
  if($number >= 50) {
    break;
  }
}

1から49まではif文の条件式に合致しないため順に繰り返し処理しますが、50ではecho文で出力された後にif文の条件式に合致しbreakが実行されforeach文から抜けます。結果として1から50の数値が順に出力されます。

break文は配列を最後まで処理したくない時などに使えますね。

PHPのforeahc文は便利

いかがだったでしょうか?foreach文がどのような処理をしているかだけでも理解できれば最初は充分だと思います。

今回の例では配列には数個しかデータが格納されてなかったですが、これが数十個、数百個となるとどうでしょう?数個であれば1つ1つ処理してもいいかもしれませんが、データが大量になるとそうはいきませんよね。

配列の要素が何個あってもforeach文でいっきに全ての要素に処理を実行できるのでとても便利ですよね!皆さんもforeach文を覚えて配列を自由に扱えるようにしましょう!