連想配列

キーと値で構造化されたデータを扱う

キーと値のペアで値を持つ「連想配列」を扱うトピック。foreach の走査と、キー / 値でのソート・検索まで一通り押さえる。

このトピックで身につくこと

  • ['key' => 値] の形で連想配列を作って読み書きできる
  • foreach ($arr as $k => $v) でキーと値を同時に取り出せる
  • array_keys / array_values でキー一覧 / 値一覧を取れる
  • sort / asort / ksort / krsort を使い分けられる
  • in_array / array_search で値を検索できる

前提知識の要点

このトピックは hello の echo / 変数 / 入力と、array-basic の添字配列の知識を前提にする。要点だけ:

<?php
// 1) 出力 / 変数展開 (ダブルクォート必須)
$name = "太郎";
echo "こんにちは{$name}\n";

// 2) 標準入力 (1 行)
$line = trim(fgets(STDIN));

// 3) 添字配列の基本
$nums = [10, 20, 30];
echo $nums[0];          // 10
$nums[] = 40;           // 末尾に追加
echo count($nums);      // 4

// 4) foreach で値だけ走査 (このトピックではキー付きも扱う)
foreach ($nums as $v) {
    echo $v, "\n";
}
▶ 3v4l で実行
やりたいこと 書き方
画面に出す echo "...";
変数展開 "こんにちは{$name}" (ダブルクォート必須)
入力 (文字列) $line = trim(fgets(STDIN));
添字配列を作る $arr = [10, 20, 30];
末尾に追加 $arr[] = 40;
全要素を走査 foreach ($arr as $v) { ... }

これで OK。詳しくやりたければ hello / array-basic トピックへ。

chapter 一覧

# chapter 内容 学習目標
1 ch01-assoc-basic/ 連想配列を作る ['key' => 値] で連想配列を作り $arr['key'] で取り出せる
2 ch02-assoc-modify/ 追加・上書き・削除 $arr['key'] = 値 で追加・上書き、unset() で削除できる
3 ch03-foreach-value/ foreach で値だけ走査 foreach ($arr as $v) で全要素の値を取り出せる
4 ch04-foreach-key-value/ foreach でキーと値 foreach ($arr as $k => $v) でキーと値を同時に取れる
5 ch05-array-keys-values/ キー一覧 / 値一覧 array_keys() / array_values() を使い分けられる
6 ch06-sort-asc/ 値で昇順ソート sort() / asort() の違いを言える
7 ch07-sort-key/ キーでソート ksort() / krsort() を使える
8 ch08-array-search/ 検索 in_array() / array_search() で値を探せる

合計 8 chapter / 21 drill / 所要 約 2 時間

進め方

  1. 各 chapter の slide.md を読む (3〜4 分)
  2. drill/ 配下の問題を順番に解く
  3. 採点: php scripts/grade.php topics/array-assoc/<chapter>/drill/<drill>/

つまづきポイント

症状 多くの原因
Undefined array key "name" 存在しないキーを参照している → isset($arr['name']) で確認
キーの順番が入れ替わる sort() を使った (添字を振り直す) → 連想配列を残したいなら asort() / ksort()
foreach で値が変わらない as &$v (参照) を使わないと元配列は書き換わらない
Array to string conversion 配列を echo で直接出力した → print_r()var_dump() を使う
キーに数字を使ったら添字配列になった 数字キーは整数として扱われる → 文字列キーで持ちたいなら "01" のようにクォートで囲む

関連トピック

トピック 関係
hello このトピックの前提 (echo / 変数 / 入力)
array-basic このトピックの前提 (添字配列・count・foreach の基本形)
array-multi 連想配列の配列で「表」や「オブジェクトリスト」を扱う
function 連想配列を引数や戻り値として渡す
db DB の 1 行は連想配列で返ってくる (['id' => 1, 'name' => '太郎'])
web $_GET / $_POST / $_SESSION はすべて連想配列

トピックを並列で参照する全体地図は TOPICS_INDEX.md にある。

案件 (dojo_map.tsv) での参照

topic_slug     chapter_dir
array-assoc    topics/array-assoc/ch01-assoc-basic
array-assoc    topics/array-assoc/ch04-foreach-key-value
array-assoc    topics/array-assoc/ch06-sort-asc
...

slug array-assoc で参照可。05-array-assoc / array-assoc どちらの path でもアクセスできる (シンボリックリンク)。

このレッスンの章

  1. ch01 ch01 — 連想配列を作る
  2. ch02 ch02 — 連想配列の追加・書き換え・削除
  3. ch03 ch03 — foreach で値だけを走査
  4. ch04 ch04 — foreach でキーと値を取り出す
  5. ch05 ch05 — array_keys / array_values
  6. ch06 ch06 — 値で昇順ソート
  7. ch07 ch07 — キーでソート
  8. ch08 ch08 — 配列の中を検索する