💡 今日の3行まとめ
  • 「キーの配列」と「値の配列」を合体させて連想配列を作るときは array_combine($キー配列, $値配列) を使う
  • for ループで添字を1つずつ回す必要がなくなり、1行で意味のわかりやすい連想配列に変換できる
  • 2つの配列の要素数が違うとエラーになるため、事前に count() で個数の一致を確かめると安全

1. 今日のお題とゴール

別々に用意された「項目名の配列」と「入力データの配列」を合体させて、キー名でわかりやすく値を取り出せる連想配列を作ります。

  • 項目名 ['id', 'name', 'role'] とデータ ['M-101', '佐藤', '編集者'] を結合する
  • 結合する前に、2つの配列の要素数が一致しているかチェックする
  • 完成した連想配列からキー名を指定してプロフィールを出力する
// 期待する出力例
ID: M-101
名前: 佐藤
役割: 編集者

2. ❌ やりがちなNGコード vs ⭕ コピペで動く正解コード

❌ やりがちなNGコードBefore
<?php
$keys   = ['id', 'name', 'role'];
$values = ['M-101', '佐藤', '編集者'];
$member = [];

// 添字 $i を使って1件ずつ手動で詰め替える
for ($i = 0; $i < count($keys); $i++) {
    $member[$keys[$i]] = $values[$i];
}

echo "ID: {$member['id']}\n";

for ループと添字 [$i] で1件ずつ詰め替えるとコードが長くなり、「2つの配列をペアにしたい」意図がひと目で伝わりません。もし $values の要素が足りないと警告が出て、意図しない null が混ざってしまいます。

⭕ コピペで動く正解コード(PHP 8.3+)After
<?php
declare(strict_types=1);

// 1. 項目名(キーになる配列)と、データ(値になる配列)を用意する
$keys   = ['id', 'name', 'role'];
$values = ['M-101', '佐藤', '編集者'];

// 2. 要素数がズレていると ValueError になるため事前にチェックする
if (count($keys) !== count($values)) {
    echo "エラー:項目名とデータの数が一致しません。\n";
    exit;
}

// 3. キー配列と値配列をペアにして連想配列を1行で生成する
// 結果: ['id' => 'M-101', 'name' => '佐藤', 'role' => '編集者']
$member = array_combine($keys, $values);

// 4. 数字の添字 [0] ではなく、意味のわかるキー名で取り出して出力する
echo "ID: {$member['id']}\n";
echo "名前: {$member['name']}\n";
echo "役割: {$member['role']}\n";

3. ここだけ押さえる!3つのポイント

1array_combine($キー配列, $値配列) は第1引数がキーになる

第1引数の配列が「キー(見出し)」、第2引数の配列が「値(中身)」として先頭から順番にペアになります。引数の順番を逆にするとデータ側がキーになってしまうため、「キーが先、値があと」と覚えましょう。

2PHP 8以降では要素数が異なると ValueError で停止する

2つの配列の個数が1つでもズレていると、ValueError が発生して処理が止まります。外部データや入力値を結合するときは、直前に count($keys) !== count($values) で個数を確認するのが鉄則です。

3同じキー名が重複していると「あと勝ち」で上書きされる

連想配列では同じキー名を複数持てないため、$keys の中に同じ名前があると後ろの要素で上書きされます。項目名の配列には、'id' や 'name' のように重複しない名前を指定しましょう。

4. 1分ミニチャレンジ

🚀 手を動かしてみよう

正解コードの $values から '編集者' を消して2個(['M-101', '佐藤'])に減らし、実行してみましょう。array_combine() の前に count() チェックが働き、安全にエラーメッセージが表示されることを確認できます。