PHPの連想配列を使いこなす

phpアイキャッチ PHP

こんにちは、かつコーチです。

前回は配列の基本として、添字(0 1 2…)で値を管理する「添字配列」を解説しました。

今回はその発展形である「連想配列」を扱います。

添字配列は「何番目に何が入っているか」で管理しますが、連想配列は「どんな名前で何が入っているか」で管理できるので、実務でも登場頻度が非常に高い機能です。

連想配列とは?

添字配列との違い

連想配列とは、数字の添字の代わりに、自分で決めた「キー(名前)」を使って値を管理できる配列のことです。

前回学んだ添字配列は、こんな形でした。

<?php
$fruits = ["りんご", "みかん", "ぶどう"];
echo $fruits[0]; // りんご
?>

これを連想配列にすると、次のように書けます。

<?php
$user = [
    "name" => "かつコーチ",
    "age" => 30,
    "job" => "エンジニア",
];

echo $user["name"]; // かつコーチ
?>

0 1 2 という無機質な番号の代わりに、"name" "age" "job" という意味のある名前でデータを管理できるのが最大の特徴です。

なぜ連想配列が必要なのか

添字配列だけだと、こんな問題が起こります。

<?php
$user = ["かつコーチ", 30, "エンジニア"];

echo $user[1]; // 30(これが年齢だと、コードを読んだだけでは分かりにくい)
?>

$user[1] が何を表しているのか、配列の中身を1つずつ数えないと分かりません。

これが連想配列だと、次のように一目瞭然になります。

<?php
$user = [
    "name" => "かつコーチ",
    "age" => 30,
    "job" => "エンジニア",
];

echo $user["age"]; // 30(「年齢を取り出している」とコードから読み取れる)
?>

実務では「ユーザー情報」「フォームの入力内容」「APIから返ってくるデータ」など、複数の項目を意味づけて扱う場面が非常に多いです。

こうした場面で連想配列は欠かせない存在になります。

連想配列の基本的な使い方

連想配列を作る

=> を使ってキーと値のペアを並べることで、連想配列を作れます。

<?php
$product = [
    "name" => "ノートPC",
    "price" => 98000,
    "stock" => 5,
];
?>

キーには文字列だけでなく数値も使えますが、意味を持たせたい場合は文字列のキーを使うのが基本です。

キーを指定して値を取り出す

添字配列と同じ感覚で、[] の中にキーを指定して値を取り出します。

<?php
$product = [
    "name" => "ノートPC",
    "price" => 98000,
    "stock" => 5,
];

echo $product["name"];  // ノートPC
echo $product["price"]; // 98000
?>

値を追加・更新する

キーを指定して代入すると、値を追加または更新できます。

<?php
$product = [
    "name" => "ノートPC",
    "price" => 98000,
];

$product["stock"] = 5; // 新しいキーを追加
$product["price"] = 89800; // 既存のキーを更新

print_r($product);
// 出力:
// Array
// (
//     [name] => ノートPC
//     [price] => 89800
//     [stock] => 5
// )
?>

キーがすでに存在すれば「更新」、存在しなければ「追加」として動きます。

連想配列とforeachの組み合わせ

連想配列を foreach で回すときは、キーと値を両方受け取る書き方が定番です。

<?php
$user = [
    "name" => "かつコーチ",
    "age" => 30,
    "job" => "エンジニア",
];

foreach ($user as $key => $value) {
    echo $key . ": " . $value . "\n";
}
// 出力:
// name: かつコーチ
// age: 30
// job: エンジニア
?>

このように、キーと値のペアをそのまま出力できるのが連想配列ならではの書き方です。

よくあるつまずきポイント・エラー対処

キーの綴りミスに気づかない

私が実際にハマった失敗が、連想配列のキー名のタイプミスです。

❌ Before:キー名を打ち間違えてバグに気づけない

<?php
$user = [
    "name" => "かつコーチ",
    "email" => "katsu@example.com",
];

// "emial" とタイプミスしている
echo $user["emial"];
?>

これを実行すると、次のような警告が出て、値は null 扱いになります。

Warning: Undefined array key "emial" in /path/to/file.php on line 6

厄介なのは、エラーで処理が止まるわけではなく、警告を出しつつ空の値のまま処理が進んでしまう点です。

私はフォームの送信処理でこのミスをしてしまい、「メールが送られない」という不具合の原因究明に半日かかったことがあります。

原因は、送信先メールアドレスを取り出すときのキー名を1文字打ち間違えていた、という単純なものでした。

✅ After:isset() で存在確認してから使う/エディタの補完を活用する

<?php
$user = [
    "name" => "かつコーチ",
    "email" => "katsu@example.com",
];

if (isset($user["email"])) {
    echo $user["email"];
} else {
    echo "メールアドレスが設定されていません";
}
?>

isset() で存在確認をする習慣をつけておくと、キー名のタイプミスにその場で気づけます。

加えて、VSCodeなどのエディタで配列のキーを補完してくれる拡張機能を使うのも、地味に効果の高い対策です。

添字配列と連想配列を混同する

もうひとつよくあるのが、連想配列に対して添字配列と同じ感覚で count()foreach を使い、キーの存在を忘れてしまうケースです。

比較表で整理しておきましょう。

項目添字配列連想配列
キーの種類数値(0, 1, 2…自動採番)自分で決めた文字列や数値
主な用途順序のあるリスト(一覧など)名前付きのデータ(ユーザー情報など)
値の取り出し方$配列[0]$配列["key"]
foreachでの書き方as $valueas $key => $value

「今扱っているのは順番のリストか、意味のある名前付きデータか」を意識して使い分けると、コードの意図が明確になります。

応用・一歩先の使い方

連想配列を組み合わせた「配列の配列」

実務では、連想配列を複数まとめた「配列の配列(多次元配列)」もよく登場します。

<?php
$users = [
    ["name" => "かつコーチ", "age" => 30],
    ["name" => "佐藤さん",   "age" => 25],
    ["name" => "鈴木さん",   "age" => 40],
];

foreach ($users as $user) {
    echo $user["name"] . "さん(" . $user["age"] . "歳)\n";
}
// 出力:
// かつコーチさん(30歳)
// 佐藤さんさん(25歳)
// 鈴木さんさん(40歳)
?>

データベースから複数件のユーザー情報を取得すると、多くの場合こういった「連想配列がいくつも並んだ配列」の形で返ってきます。

今のうちにこの形に慣れておくと、後のデータベース連携がぐっと理解しやすくなります。

array_key_exists() と isset() の違い

存在確認には array_key_exists() という関数もあります。

isset() との違いは、値が null のときの挙動です。

<?php
$user = ["name" => "かつコーチ", "email" => null];

var_dump(isset($user["email"]));            // false(値がnullなのでfalse扱い)
var_dump(array_key_exists("email", $user)); // true(キー自体は存在する)
?>

「値が null かどうかは気にせず、キーの存在だけを厳密に確認したい」場合は array_key_exists() を使うと意図が正確に伝わります。

まとめ

この記事のポイント

  • 連想配列は数字の添字の代わりに、自分で決めたキーで値を管理できる配列
  • $配列["キー"] = 値 で追加・更新、foreach ($配列 as $key => $value) で取り出す
  • キー名のタイプミスは Undefined array key の警告で気づきにくいバグの原因になる
  • 添字配列と連想配列は「順序のリストか、名前付きデータか」で使い分ける
  • 連想配列を複数まとめた「配列の配列」はデータベース連携でも頻出する形

次に読むべき記事

配列の基本が身についたら、次はその配列を「関数」に渡して処理する方法を学んでいきましょう。

→ 次の記事:PHPの関数の作り方と引数・戻り値の基本

タイトルとURLをコピーしました