【PHP】Lesson4-2:連想配列を理解しよう

一つ前のレッスンでは 配列の基本 について学習しました。
今回は 連想配列 について見ていきましょう。
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プログラムが書けるようになります。
さっそく本文を読み進めて、PHPの連想配列をマスターしましょう!

連想配列とは?|文字列キーでデータ管理する仕組みを解説
連想配列 とは、配列をキーと値のペアとしてする保存するデータ構造の一種です。
通常の配列ではキーが整数のインデックスになりますが、文字列をキーとして使うことで、データに意味を持たせることができます。
連想配列は、以下のように定義できます:
// 連想配列の定義方法 $変数 = [キー1 => 値1, キー2 => 値2, ...];
たとえばユーザー情報を管理する場合に、名前や年齢といった属性名をキーとして扱えます。
// 連想配列の定義 $assocArray = ["name" => "John", "age" => 25, "city" => "New York"];
ここで"name"
, "age"
, "city"
が文字列キー、対応する値がそれぞれ"John"
, 25
, "New York"
です。
連想配列の使用例|値の取得・更新・追加方法をマスターしよう
連想配列を操作する方法は通常の配列と同様です。
通常の配列ではインデックス番号を使用していたところがキーに変わります。
// 配列の作成 $user = [ // 連想配列の定義。このように改行して書くと分かりやすい。 "name" => "Alice", // キー:name、値:Alice "age" => 30, // キー:age、値:30 "city" => "Los Angeles" // キー:city、値:Los Angels ]; // 値の取り出し 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 )
この例では文字列キーを使ってデータを容易にアクセス・操作しています。
連想配列の基本操作|キー取得・並び替えの関数解説
連想配列は、以下の組み込み関数を使用することで便利に操作することができます。
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の連想配列について、基本の仕組みや使い方、キーや値の取り出し・更新・追加の方法、そしてキーの取得や並び替えなどの基本的な関数の使い方まで解説しました。
連想配列を理解し使いこなせるようになれば、データを柔軟に整理・管理できるようになり、より実践的なプログラムを作成できるようになります。
次のステップでも、この知識を活かして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()
は逆順でキーを並べ替えるため、結果の確認やデータの並び替えに便利です。
- 説明: ここでは、キーが文字列(「名前」「年齢」「職業」)の配列