連想配列の応用

連想配列を応用したプログラムを見てみましょう。ここでは次の表のようなデータを考えます。

表の中には3件のレコードがあり、1件のレコードには、nameageという2つの項目があります。このようなデータは通常の配列(添字配列)と連想配列を組み合わせることで表現できます。次のプログラム(a_array2.php)を作成してみましょう。

<?php
$students = [
  ["name" => "Andy", "age" => 20],
  ["name" => "Betty", "age" => 19],
  ["name" => "Carol", "age" => 21]
];

for ($i = 0; $i < 3; $i++) {
    if ($students[$i]["age"] >= 20) {
        echo "Hello ";
        echo $students[$i]["name"] . PHP_EOL;
    }
}

まずはプログラムを実行してみましょう。

$ php a_array2.php
Hello Andy
Hello Carol

実行結果からageキーの値が20以上のレコードだけが出力されているのがわかります。

それではプログラムの詳細を見てみましょう。ここでは配列$studentsを宣言しています。

$students = [
  ["name" => "Andy", "age" => 20],
  ["name" => "Betty", "age" => 19],
  ["name" => "Carol", "age" => 21]
];

よく見ると$studentsは通常の配列(添字配列)でありながら、各要素は連想配列として定義されているのがわかります。このような配列は2次元配列と呼ぶこともあります。

配列$studentsを宣言した後、for文を使って3件のデータを繰り返し処理します。

for ($i = 0; $i < 3; $i++) {
    if ($students[$i]["age"] >= 20) {
        echo "Hello ";
        echo $students[$i]["name"] . PHP_EOL;
    }
}

繰り返しの中では$students[$i]にアクセスしていますが、要素番号$iを指定した先にあるのは連想配列です。たとえば$i0の場合、つまり$students[0]と指定すると次の連想配列にアクセスできます。

["name" => "Andy", "age" => 20]

同様に$students[1]の場合は、次の連想配列にアクセスできます。

["name" => "Betty", "age" => 19],

$students[2]の場合は、次の連想配列にアクセスできます。

["name" => "Carol", "age" => 21]

for文の反復処理の中でif ($students[$i]["age"] >= 20) {と記述することで、3件のレコードの中でのageキーが20以上か確認しています。AndyCarolのレコードはこの条件を満たします。その後echo $students[$i]["name"] . PHP_EOL;と記述することで、2人の名前"Andy""Carol"が順に出力されるのです。


前へ | 次へ