PHP PHP入門講座 プログラミング

【PHPプログラミング入門講座】連想配列のループ処理

PHPプログラミングのキービジュアル

連想配列のループ処理

連想配列は、配列と同様に複数の要素を保持するデータ構造であり、複数の要素に対して繰り返し処理(ループ処理)を使って共通の処理を実行することが可能です。
連想配列の場合も、foreach文、for文、while文、do-while文のいずれも使うことができますが、よく使うのはforeach文とfor文です。
今回はこの2つに絞って説明します。

もし、連想配列について分からない場合は、記事「【PHPプログラミング入門講座】連想配列」で説明していますので、この記事をご覧ください。

連想配列を使ったforeach 文


記事「【PHPプログラミング入門講座】配列とループ処理 (foreach文)」で、配列を使ったforeach文について説明しました。
配列を使ったforeach文の構文は次の通りです。

<構文>

foreach(配列A as 変数A) {
  処理A
}

サンプルプログラムを書きます。

<サンプルプログラム>

<?php
  $priceList = [110, 90, 80, 100, 60];
  foreach($priceList as $price) {
    echo $price . '円<br>';
  }

では、連想配列を使ったforeach文はどのように書くでしょうか。
次のようになります。

foreach(連想配列A as キーの変数A => 値の変数A) {
  処理A
}

連想配列の変数を「連想配列A」に設定します。
そして、各要素のキーと値を「キーの変数A」と「値の変数A」に代入して、順番にループ処理をしていきます。
具体的なサンプルプログラムを書きます。

<サンプルプログラム>

<?php
  $weekDays = [
    'Sunday' => '日曜日',
    'Monday' => '月曜日',
    'Tuesday' => '火曜日',
    'Wednesday' => '水曜日',
    'Thursday' => '木曜日',
    'Friday' => '金曜日',
    'Saturday' => '土曜日'
  ];
 
  foreach($weekDays as $english => $japanese) {
    echo $english . 'は' . $japanese . 'です。<br>';
  }

<実行結果>

Sundayは日曜日です。
Mondayは月曜日です。
Tuesdayは火曜日です。
Wednesdayは水曜日です。
Thursdayは木曜日です。
Fridayは金曜日です。
Saturdayは土曜日です。

この処理の流れについて図で説明します。

連想配列のループ処理(foreach文)のサンプルプログラム

図内の番号に対して説明します。

(1) 連想配列を変数$weekDaysに代入します。変数$weekDaysのデータ型は「配列型 (Array)」になります。
 ※データ型に「連想配列型」はありません。配列も連想配列もデータ型は「配列型 (Array)」です。

(2) 連想配列$weekDaysをforeach文の( )内に設定します。
 そして、asを書き、その後ろに「キーの変数 => 値の変数」の形で、キー用の変数と値用の変数を2つ書きます。
 これらの変数はforeachブロック内でのみ使用できます。なお、変数名は自由に名付けてOKです。
 連想配列$weekDaysの最初の要素から順番に、キーが$englishに、値が$japaneseに代入されて、foreachブロック内の処理が行われます。

(3) 連想配列のキーが代入された変数$englishと値が代入された$japaneseは、foreachブロック内の処理で使用することができます。

(4) 「[キー ($english)]は[値 ($japanese)]です。<br>」と出力します。
 このサンプルプログラムでは、$weekDaysのキーは英語の曜日で、値は日本語の曜日なので、
 1回目の処理では「Sundayは日曜日です。<br>」、
 2回目の処理では「Mondayは月曜日です。<br>」、
 3回目の処理では「Tuesdayは火曜日です。<br>」、、、
 というように出力されていきます。

(5) foreachブロックの最後に到着した場合は、foreachブロックの最初に戻ります。
 最初に戻り、次に処理する要素があれば、次の要素のキーを$englishに、値を$japaneseに代入し、再びforeachブロック内の処理を実行します。
 次に処理する要素が無い場合は、(6)→(7)の流れで、foreach文の処理を終了します。

連想配列を使ったfor文

for文は、基本的に配列のインデックス 番号をカウントアップして繰り返し処理を実行することが多いですが、連想配列で使用することもできます。
例えば、次のように連想配列のキーに番号(連番)を付与する形である場合は、for文を使用することができます。

<?php
  $map = [
    'key_1' => 'りんご',
    'key_2' => 'バナナ',
    'key_3' => 'みかん'
  ];

  for($num=1; $num<=3; $num++) {
    $key = 'key_' . $num;
    echo $key . 'の値は' . $map[$key] . 'です。<br>';
  }

<実行結果>

key_1の値はりんごです。
key_2の値はバナナです。
key_3の値はみかんです。

for文で変数$numが1から3に増えていくので、「$key = 'key_' . $num;」の処理により、変数$keyの値は、key_1、key_2、key_3と変化します。
「$map[$key]」の値は、$keyがkey_1、key_2、key_3になるため、
1回目のループで、
$map['key_1']となるので「りんご」
2回目のループで、
$map['key_2']となるので「バナナ」
3回目のループで、
$map['key_3']となるので「みかん」
のように変化します。

結果、<実行結果>のように出力されます。

このように、連想配列のキーに変数を使うことで、キーを動的に変化させることができます。

おわりに

今回は、連想配列のループ処理について説明しました。
foreach文は基本形になります。
そして、for文は応用した形になります。
for文の例で示したような連想配列のキーに変数を使う書き方は、実際のWebシステム開発時に使いますので、知識として覚えておきましょう。

PHPプログラミング入門講座 〜 全記事一覧 〜

-PHP, PHP入門講座, プログラミング
-, , , , , ,

Copyright© ハッピー・プログラミング・ライフ , 2020 All Rights Reserved.