【PHP】Lesson4-2:連想配列の基本と使い方を理解しよう

PHPでは配列のキーを文字列として使用することで、簡単にデータを構造化し、意味のある形で管理できます。
これは連想配列とも呼ばれ、配列の操作を柔軟かつ直感的に行うのに役立ちます。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数編
Lesson4:データ構造編
・Lesson4-1:配列の基本を理解しよう
・Lesson4-2:キーが文字列の配列を理解しよう ◁今回はココ
・Lesson4-3:配列の要素を追加/削除しよう
・Lesson4-4:配列を調査しよう
・Lesson4-5:配列を操作しよう
・Lesson4-6:配列を並び替えよう
・Lesson4-7:配列の多次元化を理解しよう
・確認問題4-1:ナインゲームを作ろう
・確認問題4-2:宝探しゲームを作ろう
・確認問題4-3:マルバツゲームを作ろう
Lesson5:クラス編
連想配列とは?|PHPで文字列キーを使った配列の仕組みを理解しよう

キーが文字列の配列とは、配列のキーとして文字列を使用するPHPのデータ構造の一種です。
通常の配列ではキーが整数のインデックスになりますが、文字列をキーとして使うことで、データに意味を持たせることができます。
たとえばユーザー情報を管理する場合に、名前や年齢といった属性名をキーとして扱えます。
キーが文字列の配列は、以下のように定義できます:
// 基本構文(2つの方法) $assocArray1 = array("name" => "John", "age" => 25, "city" => "New York"); $assocArray2 = ["name" => "John", "age" => 25, "city" => "New York"];
ここで"name"
, "age"
, "city"
が文字列キー、対応する値がそれぞれ"John"
, 25
, "New York"
です。
PHPでは古いバージョンではarray()
、新しいバージョンでは[]
を使うことが一般的です。
使用例で学ぶ|PHPの連想配列で意味のあるデータ構造を実装しよう
以下は文字列キーを持つ配列の操作例です。
// 配列の作成 $user = [ "name" => "Alice", "age" => 30, "city" => "Los Angeles" ]; // 値の取り出し echo "名前: " . $user["name"] . PHP_EOL; // "Alice" echo "年齢: " . $user["age"] . PHP_EOL; // 30 // 値の更新 $user["age"] = 31; // 値の追加 $user["job"] = "Engineer"; // 配列全体の表示 print_r($user);
出力結果は次のようになります:
名前: Alice 年齢: 30 Array ( [name] => Alice [age] => 31 [city] => Los Angeles [job] => Engineer )
この例では文字列キーを使ってデータを容易にアクセス・操作しています。
配列操作|連想配列のキー取得・ソートなどの基本関数を使いこなそう
PHPにはキーが文字列の配列を操作するための便利な関数があります:
array_keys()
: 配列のすべてのキーを取得します。array_values()
: 配列のすべての値を取得します。ksort()
: キーを昇順にソートします。krsort()
: キーを降順にソートします。
使用例は以下の通りです。
$user = [ "name" => "Bob", "age" => 28, "city" => "Chicago" ]; // キーと値の取得 $keys = array_keys($user); $values = array_values($user); print_r($keys); // ["name", "age", "city"] print_r($values); // ["Bob", 28, "Chicago"] // キーの昇順ソート ksort($user); print_r($user); // "age", "city", "name" の順で表示
これらの関数を使用することで、データの操作やソートが簡単になります。
まとめ|連想配列の基本構文と操作方法をおさらいしよう
PHPのキーが文字列の配列(連想配列)はデータを意味のある形で構造化する強力な方法です。
この機能を使えばデータ操作が直感的になり、コードの可読性が向上します。
特にarray_keys()
, array_values()
, ksort()
, krsort()
などの関数を活用することで、さらに柔軟な操作が可能です。
演習問題|PHPの連想配列を使って配列の基本操作を習得しよう

キーが文字列の配列を使って、基本的な配列操作を勉強しましょう。
名前、年齢、職業のデータをキーと値で構成された配列に格納し、そのデータを出力します。
また配列のキーと値の一覧を取得したり、配列をキーで昇順・降順にソートして表示します。
この演習の要件
以下の要件に従ってコードを完成させてください。
- 配列
$person
を作成し、以下のキーと値を格納すること。- キー「名前」、値「田中太郎」
- キー「年齢」、値
25
- キー「職業」、値「エンジニア」
- 配列
$person
の内容を次のように出力すること。- 「キー: 名前, 値: 田中太郎」
- 「キー: 年齢, 値: 25」
- 「キー: 職業, 値: エンジニア」
- 配列のキー一覧を取得し、カンマで区切って出力すること。
- 出力例: 「配列のキー一覧: 名前, 年齢, 職業」
- 配列の値一覧を取得し、カンマで区切って出力すること。
- 出力例: 「配列の値一覧: 田中太郎, 25, エンジニア」
- 配列をキーで昇順にソートし、内容を出力すること。
- 配列をキーで降順にソートし、内容を出力すること。
- ソート後の結果は次のように出力すること。
- 「キー: 名前, 値: 田中太郎」
- 「キー: 年齢, 値: 25」
- 「キー: 職業, 値: エンジニア」
ただし、以下のような実行結果となること。
配列の内容を表示します。 キー: 名前, 値: 田中太郎 キー: 年齢, 値: 25 キー: 職業, 値: エンジニア 配列のキー一覧: 名前, 年齢, 職業 配列の値一覧: 田中太郎, 25, エンジニア キーで昇順ソートした結果: キー: 名前, 値: 田中太郎 キー: 年齢, 値: 25 キー: 職業, 値: エンジニア キーで降順ソートした結果: キー: 職業, 値: エンジニア キー: 年齢, 値: 25 キー: 名前, 値: 田中太郎
解き方のヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:連想配列$personを初期化し、「名前」「年齢」「職業」のキーとそれぞれの値を設定
2:「配列の内容を表示します。」と出力
3:array_keys関数を使用して配列$personのキーを取得し、変数$keysに代入
4:forループを使用して$keysの要素数分だけ繰り返し処理を行う
□ 現在のキーを$keys[$i]として取得し、変数$keyに代入
□ $keyを使用して配列$personから対応する値を取得し、変数$valueに代入
□ 「キー: $key, 値: $value」と出力
5:implode関数を使用して$keysの要素を文字列として結合し、「配列のキー一覧: 」と出力
6:array_values関数を使用して配列$personの値を取得し、変数$valuesに代入
7:implode関数を使用して$valuesの要素を文字列として結合し、「配列の値一覧: 」と出力
8:ksort関数を使用して配列$personをキーで昇順にソート
9:「キーで昇順ソートした結果:」と出力
10:array_keys関数を再度使用してソート後の$personのキーを取得し、forループで処理を行う
□ 現在のキーを$keys[$i]として取得し、変数$keyに代入
□ $keyを使用して配列$personから対応する値を取得し、変数$valueに代入
□ 「キー: $key, 値: $value」と出力
11:krsort関数を使用して配列$personをキーで降順にソート
12:「キーで降順ソートした結果:」と出力
13:array_keys関数を再度使用してソート後の$personのキーを取得し、forループで処理を行う
□ 現在のキーを$keys[$i]として取得し、変数$keyに代入
□ $keyを使用して配列$personから対応する値を取得し、変数$valueに代入
□ 「キー: $key, 値: $value」と出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
<?php // キーが文字列の配列を作成します。 /* 【穴埋め問題1】 ここに連想配列を初期化して、キーが「名前」「年齢」「職業」でそれぞれの値を設定するコードを書いてください。 */ // 配列の内容を表示します。 echo "配列の内容を表示します。" . PHP_EOL; /* 【穴埋め問題2】 ここにarray_keys関数を使って配列のキーを取得し、変数$keysに代入するコードを書いてください。 */ for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; // 現在のキー $value = $person[$key]; // キーに対応する値 echo "キー: $key, 値: $value" . PHP_EOL; } // キーの一覧を表示します。 echo "配列のキー一覧: " . implode(", ", $keys) . PHP_EOL; // 値の一覧を取得して表示します。 /* 【穴埋め問題3】 ここにarray_values関数を使って配列の値を取得し、変数$valuesに代入するコードを書いてください。 */ echo "配列の値一覧: " . implode(", ", $values) . PHP_EOL; // 配列をキーで昇順ソートします。 /* 【穴埋め問題4】 ここにksort関数を使って配列をキーで昇順に並べ替えるコードを書いてください。 */ echo "キーで昇順ソートした結果:" . PHP_EOL; $keys = array_keys($person); // ソート後のキーを再取得します。 for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; $value = $person[$key]; echo "キー: $key, 値: $value" . PHP_EOL; } // 配列をキーで降順ソートします。 /* 【穴埋め問題5】 ここにkrsort関数を使って配列をキーで降順に並べ替えるコードを書いてください。 */ echo "キーで降順ソートした結果:" . PHP_EOL; $keys = array_keys($person); // ソート後のキーを再取得します。 for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; $value = $person[$key]; echo "キー: $key, 値: $value" . PHP_EOL; }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
演習問題の答え合わせ
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
<?php // キーが文字列の配列を作成します。 $person = [ "名前" => "田中太郎", "年齢" => 25, "職業" => "エンジニア" ]; // 配列の内容を表示します。 echo "配列の内容を表示します。" . PHP_EOL; $keys = array_keys($person); // 配列のキーを取得します。 for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; // 現在のキー $value = $person[$key]; // キーに対応する値 echo "キー: $key, 値: $value" . PHP_EOL; } // キーの一覧を表示します。 echo "配列のキー一覧: " . implode(", ", $keys) . PHP_EOL; // 値の一覧を取得して表示します。 $values = array_values($person); // 配列の値を取得します。 echo "配列の値一覧: " . implode(", ", $values) . PHP_EOL; // 配列をキーで昇順ソートします。 ksort($person); // ksort()は配列をキーで昇順に並べ替えます。 echo "キーで昇順ソートした結果:" . PHP_EOL; $keys = array_keys($person); // ソート後のキーを再取得します。 for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; $value = $person[$key]; echo "キー: $key, 値: $value" . PHP_EOL; } // 配列をキーで降順ソートします。 krsort($person); // krsort()は配列をキーで降順に並べ替えます。 echo "キーで降順ソートした結果:" . PHP_EOL; $keys = array_keys($person); // ソート後のキーを再取得します。 for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; $value = $person[$key]; echo "キー: $key, 値: $value" . PHP_EOL; }
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
配列の作成
$person = [ "名前" => "田中太郎", "年齢" => 25, "職業" => "エンジニア" ];
- 説明: ここでは、キーが文字列(「名前」「年齢」「職業」)の配列
$person
を作成しています。 - ポイント:
- 配列のキーが文字列である場合、名前付きデータを扱いやすくなります。
- 値はそれぞれ文字列や数値を格納可能です。
配列の内容を表示
echo "配列の内容を表示します。" . PHP_EOL; $keys = array_keys($person); for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; $value = $person[$key]; echo "キー: $key, 値: $value" . PHP_EOL; }
- 説明:
- 配列
$person
の全てのキーをarray_keys()
関数で取得します。 for
ループを使って各キーと値を取り出し表示します。
- 配列
- ポイント:
array_keys()
は、配列から全てのキーを取得するPHPのビルトイン関数です。count()
を使って配列の長さを取得し、ループの終了条件を設定しています。
配列のキー一覧と値一覧の取得
$keys = array_keys($person); echo "配列のキー一覧: " . implode(", ", $keys) . PHP_EOL; $values = array_values($person); echo "配列の値一覧: " . implode(", ", $values) . PHP_EOL;
- 説明:
array_keys()
でキー一覧、array_values()
で値一覧を取得しています。implode()
関数で配列を文字列に変換し、カンマ区切りで出力します。
- ポイント:
implode()
は配列を文字列として結合する関数で、見やすい形式でデータを表示できます。
配列をキーで昇順ソート
ksort($person); echo "キーで昇順ソートした結果:" . PHP_EOL; $keys = array_keys($person); for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; $value = $person[$key]; echo "キー: $key, 値: $value" . PHP_EOL; }
- 説明:
ksort()
関数を使って、キーを昇順(アルファベット順)に並び替えます。- ソート後のキーと値を再度ループで表示しています。
- ポイント:
ksort()
はキーの並び順を変更しますが、値の関連付けは保持されます。
配列をキーで降順ソート
krsort($person); echo "キーで降順ソートした結果:" . PHP_EOL; $keys = array_keys($person); for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; $value = $person[$key]; echo "キー: $key, 値: $value" . PHP_EOL; }
- 説明:
krsort()
関数で、キーを降順(逆アルファベット順)に並び替えます。- 再度ソート後の配列を出力しています。
- ポイント:
krsort()
は逆順でキーを並べ替えるため、結果の確認やデータの並び替えに便利です。
- 説明: ここでは、キーが文字列(「名前」「年齢」「職業」)の配列
まとめ
このコードではキーが文字列の配列を作成し、データの表示、キーと値の一覧取得、キーでのソート方法を学びました。
- キーが文字列の配列: 名前付きデータを管理するのに適しています。
- PHPビルトイン関数:
array_keys()
とarray_values()
で配列データを簡単に取得できます。ksort()
とkrsort()
でキーの並び順を自由に変更できます。
これらの操作を理解することでPHPで効率よく配列を扱えるようになります。
今回学んだ内容を応用して、他のシナリオでも配列を活用してみてください!