💡 今日の3行まとめ
  • 連想配列のリストから特定のキーの値だけを取り出すなら array_column() が最短
  • 第3引数に 'id' などを指定すると「IDをキーにした検索用の辞書配列」が1行で作れる
  • 存在しないIDを参照したときの警告は、Null合体演算子 ?? で安全に回避できる

1. 今日のお題とゴール

データベースやAPIから取得した「ユーザー一覧の配列」から、名前だけのリストを作ったり、特定のIDのユーザー名を素早く引き当てたりする処理を書いてみましょう。

  • ユーザー配列から「名前(name)だけの配列」を取り出す
  • 「id をキー、name を値」にした連想配列(辞書)を作る
  • 指定したID(102 と 999)の名前を表示し、未登録なら「未登録」と出力する
// 期待する出力例
名前リスト: 佐藤, 鈴木, 高橋
ID:102 の名前: 鈴木
ID:999 の名前: 未登録

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

❌ やりがちなNGコードBefore
<?php
$names = [];
$userMap = [];
foreach ($users as $user) {
    $names[] = $user['name'];
    $userMap[$user['id']] = $user['name'];
}
echo $userMap[999]; // Warning: Undefined array key 999

毎回空の配列を用意して foreach で詰め替えると、コードが長くなり記述ミスも増えます。さらに、存在しないキー(999)をそのまま参照するとPHPのWarning(未定義キー警告)が発生してしまいます。

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

$users = [
    ['id' => 101, 'name' => '佐藤', 'role' => 'admin'],
    ['id' => 102, 'name' => '鈴木', 'role' => 'editor'],
    ['id' => 103, 'name' => '高橋', 'role' => 'viewer'],
];

// 1. 'name' カラムだけを抜き出して配列にする
// 結果: ['佐藤', '鈴木', '高橋']
$names = array_column($users, 'name');

// 2. 第3引数に 'id' を指定し、[id => name] の辞書配列を作る
// 結果: [101 => '佐藤', 102 => '鈴木', 103 => '高橋']
$userMap = array_column($users, 'name', 'id');

// 3. 結果の出力(存在しないIDは ?? で初期値を返す)
echo '名前リスト: ' . implode(', ', $names) . PHP_EOL;

foreach ([102, 999] as $targetId) {
    $userName = $userMap[$targetId] ?? '未登録';
    echo "ID:{$targetId} の名前: {$userName}" . PHP_EOL;
}

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

1第2引数で「欲しいカラム」だけを抜き出す

array_column($users, 'name') と書くだけで、各要素の name だけを集めた新しい配列が作れます。foreach で空配列に $names[] = ... と追加する定型コードはもう不要です。

2第3引数で「検索しやすいキー」を割り当てる

第3引数に 'id' を渡すと、配列の添字(インデックス)が 0, 1, 2 から 101, 102, 103 に変わります。毎回ループを回してIDを探すよりも、$userMap[102] で直接引けるため処理も高速です。

3存在しないキーにはNull合体演算子(??)を使う

$userMap[$targetId] ?? '未登録' と書けば、キーが存在するときはその値を、存在しないときは右側の初期値を返してくれます。isset() の三項演算子よりも短く安全に書ける現代PHPの必須テクニックです。

4. 1分ミニチャレンジ

🚀 手を動かしてみよう

array_column($users, null, 'id') のように第2引数を null にして、print_r() で中身を確認してみましょう。
ヒント:名前だけでなく、role を含む「1人分の配列丸ごと」をIDから一発で引ける辞書配列が作れます!