【PHP】連想配列の書き方と使い方の基本
この記事では、PHPの連想配列について、キーと値でデータを管理する基本を解説します。`array()`や`[]`での書き方、要素の追加・更新・削除・取得方法を学び、配列の結合やソート、存在確認などの便利な関数も紹介します。実務で役立つ応用例まで、システムエンジニア初心者向けに分かりやすく説明します。
開発環境
- OS: Windows10
- Editor: Visual Studio Code
- PHP: 8.0以降
PHPの連想配列とは
キーと値のペアでデータを管理する配列です。 通常の配列はインデックス番号を使用してアクセスしますが、連想配列では任意のキー(文字列や数値)を使って要素にアクセスします。
通常の配列では、0、1、2といった数字のインデックス(添字)を使ってデータにアクセスします。しかし、連想配列では、それぞれのデータに意味のある名前を付けて管理できます。 例えば、ユーザーの情報を管理する場合、通常の配列では「0番目の要素が名前、1番目の要素が年齢」といったように、数字のインデックスとデータの意味を開発者が覚えておく必要があります。これに対して、連想配列では「'name'というキーに名前のデータ、'age'というキーに年齢のデータ」といった形で、キーと値が直接結びつけられているため、直感的にデータを扱えるようになります。
キー(key): 配列の要素にアクセスするために使う名前です。 このキーは、文字列だけでなく数値も指定できます。連想配列では、このキーがデータにアクセスするための識別子となります。データを取り出す際や、新しいデータを保存する際に、このキーを指定して操作を行います。
値(value): 各キーに関連付けられたデータです。 キーに対しては、必ず一つだけの値が紐付けられています。この値は、文字列、数値、真偽値(true/false)、オブジェクト、または別の配列など、PHPで扱える様々な種類のデータにすることができます。
連想配列を理解すると、データの管理がしやすくなり、より実用的なプログラムを書くことができます。
連想配列とは、通常の配列が0, 1, 2...といった数値のインデックス(添字)を使うのに対し、「キー」と呼ばれる名前(文字列)を使って要素を管理する配列のことです。これにより、「名前」「年齢」「都市」といった意味のあるキーでデータにアクセスできるようになります。
サンプルコード
php/chapter06/01.php
連想配列の基本的な書き方として、array() を使って指定する方法があります。
キーと値のペアを キー => 値 の形式で指定し、カンマで区切って記述します。この例では、"name" というキーに "John" という値、"age" に 30、"city" に "New York" が関連付けられています。
01.php1<?php 2// 連想配列の基本的な書き方 3// array() で指定する書き方 4$person = array( 5 "name" => "John", 6 "age" => 30, 7 "city" => "New York" 8); 9
php/chapter06/02.php
PHP 5.4以降では、より短く記述できる「短縮構文」が導入されました。array() の代わりに [] を使用することで、連想配列を定義できます。これは現代のPHP開発で一般的に使われる書き方です。01.phpと同じ連想配列を、より簡潔に記述しています。
02.php1<?php 2// []で指定する書き方(配列の短縮構文) 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8
php/chapter06/03.php
連想配列を最初から空の状態で作成することもできます。これは、後からプログラムの途中で要素を追加していく場合に便利です。[] を使うことで、シンプルに空の連想配列を初期化できます。
03.php1<?php 2// 連想配列の操作 3// 連想配列を初期化する 4$array = []; 5
php/chapter06/04.php
連想配列に格納されている要素の値を取得するには、キーを指定します。変数の後に [ と ] を記述し、その中に取得したい要素のキーを文字列として記述します。
この例では、$person["name"] で "John" が、$person["age"] で 30 がそれぞれ取得され、echo で出力されます。
04.php1<?php 2// 連想配列の要素を取得する 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8 9echo $person["name"]; // 出力: John 10echo $person["age"]; // 出力: 30 11
php/chapter06/05.php
連想配列に新しい要素を追加するには、存在しないキーを指定して値を代入します。
この例では、最初に name と age の要素を持つ $person に、"city" という新しいキーと "New York" という値を代入しています。print_r() 関数を使うと、配列の内容を人間が読みやすい形式で出力できます。
05.php1<?php 2// 連想配列に要素を追加する 3$person = [ 4 "name" => "John", 5 "age" => 30, 6]; 7 8$person["city"] = "New York"; 9print_r($person); // 出力: Array ( [name] => John [age] => 30 [city] => New York ) 10
php/chapter06/06.php
連想配列の既存の要素の値を更新するには、すでに存在するキーを指定して新しい値を代入します。
この例では、$person["age"] に 31 を代入することで、age の値が 30 から 31 に更新されます。
06.php1<?php 2// 連想配列の要素を更新する 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8 9$person["age"] = 31; 10print_r($person); // 出力: Array ( [name] => John [age] => 31 [city] => New York ) 11
php/chapter06/07.php
連想配列から特定の要素を削除するには、unset() 関数を使用します。unset() 関数に削除したい要素のキーを指定して呼び出します。
この例では、unset($person["city"]) を実行することで、city のキーと値のペアが $person から削除されます。
07.php1<?php 2// 連想配列の要素を削除する 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8 9unset($person["city"]); 10print_r($person); // 出力: Array ( [name] => John [age] => 30 ) 11
php/chapter06/08.php
複数の連想配列を結合して一つの新しい連想配列を作成するには、array_merge() 関数を使用します。この関数は、引数として渡された複数の配列を順番に結合し、新しい配列を返します。
この例では $person1 と $person2 が結合され、両方の要素を含む $mergedPerson が作成されます。
08.php1<?php 2// 連想配列を結合する 3$person1 = [ 4 "name" => "John", 5 "age" => 30 6]; 7 8$person2 = [ 9 "city" => "New York", 10 "country" => "USA" 11]; 12 13$mergedPerson = array_merge($person1, $person2); 14print_r($mergedPerson); // 出力: Array ( [name] => John [age] => 30 [city] => New York [country] => USA ) 15
php/chapter06/09.php
連想配列に含まれる要素の数(キーと値のペアの数)を取得するには、count() 関数を使用します。
この例では $person には3つの要素があるため、$length には 3 が代入されます。
09.php1<?php 2// 連想配列の要素数を取得する 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8 9$length = count($person); 10echo "連想配列の要素数: $length\n"; // 出力: 連想配列の要素数: 3 11
php/chapter06/10.php
連想配列内に特定のキーが存在するかどうかを確認するには、array_key_exists() 関数を使用します。この関数は、キーが存在すれば true を、存在しなければ false を返します。
var_export() は変数の情報をPHPコードとして出力する関数で、ここでは真偽値の true または false が出力されます。
10.php1<?php 2// 連想配列のキーの存在確認 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8 9$result = array_key_exists("city", $person); 10echo var_export($result); 11
php/chapter06/11.php
連想配列内に特定の値が存在するかどうかを確認するには、in_array() 関数を使用します。この関数は、値が存在すれば true を、存在しなければ false を返します。
この例では、"New York" が $person の値の中に存在するかどうかを調べています。
11.php1<?php 2// 連想配列の値の検索 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8 9$result = in_array("New York", $person); 10echo var_export($result); 11
php/chapter06/12.php
連想配列内で特定の値を持つ要素のキーを検索するには、array_search() 関数を使用します。この関数は、値が見つかった場合、その値に対応するキーを返します。もし値が見つからない場合は false を返します。
この例では、"New York" という値を持つキー "city" が検索され、そのキーが出力されます。
12.php1<?php 2// 連想配列のキーと値の検索 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8 9$result = array_search("New York", $person); 10echo var_export($result); 11
php/chapter06/13.php
連想配列をソートするにはいくつかの関数がありますが、asort() 関数は値を基準に昇順(小さい順)でソートし、キーと値の関連を維持します。
この例では、name (John), age (30), city (New York) の値がアルファベット順または数値順にソートされ、それに合わせてキーも移動します。
13.php1<?php 2// 連想配列のソート 3$person = [ 4 "name" => "John", 5 "age" => 30, 6 "city" => "New York" 7]; 8 9asort($person); 10print_r($person); // 出力: Array ( [city] => New York [name] => John [age] => 30 ) 11
php/chapter06/14.php
ここからは、連想配列を使った少し複雑な例として、注文情報の合計金額を求める練習問題を考えます。
このコードでは、複数の注文データが格納された配列 $orders を定義しています。各注文はさらに連想配列として表現されており、order_id (注文ID), item (商品名), quantity (数量), price (単価) といった情報を持っています。このような「配列の中に連想配列」という構造は、実際のシステム開発で非常によく利用されます。
14.php1<?php 2// 注文情報の合計を求める練習問題 3// 注文情報の配列 4$orders = [ 5 [ 6 "order_id" => 1, 7 "item" => "Laptop", 8 "quantity" => 1, 9 "price" => 1000 10 ], 11 [ 12 "order_id" => 2, 13 "item" => "Mouse", 14 "quantity" => 2, 15 "price" => 50 16 ], 17 [ 18 "order_id" => 3, 19 "item" => "Keyboard", 20 "quantity" => 1, 21 "price" => 80 22 ] 23]; 24
php/chapter06/15.php
前のコードで定義した $orders 配列を使って、各注文の合計金額を計算し、最終的な全体の合計金額を求めます。
foreach ループを使用し、$orders 配列の各要素(それぞれの注文情報を示す連想配列)を $order 変数に取り出します。ループの中で、各注文の quantity (数量) と price (単価) を掛け算してその注文の合計金額 ($orderTotal) を計算し、それを全体の合計金額を格納する $totalAmount に加算していきます。
ループが終了すると、すべての注文の合計金額が $totalAmount に格納され、最終的に出力されます。
15.php1<?php 2// 各注文の合計金額を計算し、全体の合計金額を求める 3$totalAmount = 0; 4 5foreach ($orders as $order) { 6 $orderTotal = $order["quantity"] * $order["price"]; 7 $totalAmount += $orderTotal; 8} 9 10echo "合計金額は: $totalAmount 円です。\n"; 11
おわりに
今回の記事では、キーと値でデータを管理するPHPの連想配列の基本を学びました。
array()や[]での書き方から、要素の追加、更新、削除、取得といった基本的な操作を理解できたことと思います。
array_merge()やcount()、array_key_exists()など、データ管理に役立つ多くの関数もご紹介しました。
特に、複数の連想配列を組み合わせた注文情報の合計を求める応用例では、実際のシステム開発でどのように連想配列が活用されるかを体験できました。
これらの知識は、より複雑なデータを扱うWebアプリケーション開発において非常に重要ですので、繰り返し練習して身につけていきましょう。