Parallels Desktop 25%OFFセール中Go!

【PHP入門】foreach文の使い方 配列の繰り返し処理

PHPでforeach文を使う方法

PHPで配列の要素をひとつずつ取り出して繰り返し処理する構文、foreach文の解説をします。

目次

foreach文の使い方

foreach文は、配列の要素をひとつずつ取り出して順番に処理していきます。すべての要素を処理したら、ループは終了します。

for文やwhile文のように、ループを終了する条件を記述する必要がないので、配列を扱うならばforeach文を使うのが便利です。

あと、配列だけではなく、オブジェクトも同じように扱うことができます。

配列から値を取り出す

foreach文の書き方は次のとおりです。

foreach (配列 as 値を入れる変数){
  処理
}

具体的に書くとこうなります。

$members = array(
  'カイザー・ヴァッテンバハ',
  'マルテ・ゾンバルト',
  'ヴェンデル・ギーレン',
  'アレクシス・ゲーアマン',
  'ジーモン・テーリヒェン'
);

foreach ($members as $value) {
  echo $value . '<br>';
}
実行結果

カイザー・ヴァッテンバハ
マルテ・ゾンバルト
ヴェンデル・ギーレン
アレクシス・ゲーアマン
ジーモン・テーリヒェン

  • ループの1周目では配列$membersの1つ目の要素の値が$valueに代入され処理されます。
  • 2周目では2つ目の要素が$valueに代入され処理されます。
  • 以降同じことを繰り返し、5週目ですべての要素を取り出したので、ループが終了します。

連想配列からキーと値を取り出す

連想配列を扱う場合は、キーをそれぞれ取り出すことができます。

foreach (配列 as キーを入れる変数 => 値を入れる変数){
  処理
}

具体的に書きます。

$member = array(
  '名前' => 'カイザー・ヴァッテンバハ',
  '年齢' => '26',
  '職業' => 'ホワホワ竹笛奏者'
);

foreach ($member as $key => $value) {
  echo '[' . $key . '] ' . $value . '<br>';
}
実行結果

[名前] カイザー・ヴァッテンバハ
[年齢] 26
[職業] ホワホワ竹笛奏者

キーと値を入れる変数名

キーと値を入れる変数名は、ここでは$key, $valueとしていますが、どんな変数名でもOKです。

ただひとつ注意してほしいのは、ループを抜けた後でもこれらの変数には値が代入されたままになるということです。

$member = array(
  '名前' => 'カイザー・ヴァッテンバハ',
  '年齢' => '26',
  '職業' => 'ホワホワ竹笛奏者'
);

foreach ($member as $key => $value) {
  echo '[' . $key . '] ' . $value . '<br>';
}

echo $value;
実行結果

[名前] カイザー・ヴァッテンバハ
[年齢] 26
[特技] ホワホワ竹笛奏者
ホワホワ竹笛奏者

foreach文の中で使う変数は、他で使われている変数名と被らないようにしておいたほうが安全でしょう。

PR

無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。

breakとcontinue

foreach文で、繰り返し処理を中断したりスキップするにはbreakcontinueを使います。

break

繰り返しの途中で処理を中断するにはbreakを使います。

$members = array(
  'カイザー・ヴァッテンバハ',
  'マルテ・ゾンバルト',
  'ヴェンデル・ギーレン',
  'アレクシス・ゲーアマン',
  'ジーモン・テーリヒェン'
);

foreach ($members as  $value) {
  if ($value == 'アレクシス・ゲーアマン') {
    break;
  }
  echo $value . '<br>';
}
実行結果

カイザー・ヴァッテンバハ
マルテ・ゾンバルト
ヴェンデル・ギーレン

$valueアレクシス・ゲーアマンになったときに処理が中断され、それ以降のループは実行されません。

continue

繰り返しの途中で処理をスキップするにはcontinueを使います。

$member = array(
  '名前' => 'カイザー・ヴァッテンバハ',
  '年齢' => '26',
  '職業' => 'ホワホワ竹笛奏者'
);

foreach ($member as  $key => $value) {
  if ($key == '年齢') {
    continue;
  }
  echo '[' . $key . '] ' . $value . '<br>';
}
実行結果

[名前] カイザー・ヴァッテンバハ
[職業] ホワホワ竹笛奏者

$key年齢のときだけ処理が実行されず、それ以降はまた繰り返し処理が再開されます。

配列の値を書き換えたい

下記は配列$numbersに入っている値を10倍にするコードです。しかし、うまくいきません。

$numbers = array(1, 2, 3, 4, 5);

foreach ($numbers as $value) {
  $value *= 10;
}

print_r($numbers);
実行結果
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)

なぜ$numbersには10倍された値が入らなかったのでしょうか。

それはforeach文において、$valueには$numbersの要素のコピーが代入されるからです。コピーを10倍しても、元の配列$numbersの要素は書き換えられません。このように変数に他の変数の値のコピーを渡すことを「値渡し」といいます。

では、どうすれば配列$numbersの値を書き換えることができるのでしょうか。

$numbers = array(1, 2, 3, 4, 5);

foreach ($numbers as &$value) {
  $value *= 10;
}

print_r($numbers);
実行結果
Array
(
    [0] => 10
    [1] => 20
    [2] => 30
    [3] => 40
    [4] => 50
)

今度はうまくいきました。

$valueの前に&をつけると、$numbersの要素は$value「参照渡し」されます。参照渡しとは$value$numbers[*]エイリアス(別名)になるようなものだと思ってください。そうすると、$valueを書き換えれば$numbers[*]も書き換わるというわけです。

他の方法もあります。

$numbers = array(1, 2, 3, 4, 5);

foreach ($numbers as $key => $value) {
  $numbers[$key] = $value * 10;
}

print_r($numbers);
実行結果
Array
(
    [0] => 10
    [1] => 20
    [2] => 30
    [3] => 40
    [4] => 50
)

$numbers[*]に直接値を代入していく方法です。

参照渡しを使う方法と比べるとスマートさを欠きますが、私はこちらのほうが好きです。参照渡しってなんか難しいもんね。

foreach文を使わなくてもできること

配列の値の合計を計算してみます。

$numbers = array(1, 2, 3, 4, 5);
$sum = NULL;

foreach ($numbers as $value) {
  $sum += $value;
}

echo $sum;
実行結果
15

はい、うまくいきました。

じゃあ、このやり方でいいのかといえば、別の方法もあるわけです。

$numbers = array(1, 2, 3, 4, 5);
$sum = array_sum($numbers);

echo $sum;
実行結果
15

array_sum関数を使ってみました。こっちのほうがオシャレですよね。

このように、PHPには配列を扱うための便利な関数がたくさん用意されています。

馬鹿の一つ覚えで何でもforeachでやるのではなく、このような関数も使っていきましょう。

でわでわ

PR

無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。

PHPでforeach文を使う方法

この記事が気に入ったら
いいね または フォローしてね!

シェアしてね

コメント

コメントする

目次