【PHP8.x】array_column関数の使い方
array_column
関数は、複数の連想配列やインデックス配列からなる多次元配列(配列の配列)から、特定のキー(カラム)に対応する全ての値を取り出し、それらを要素とする新しい一次元配列を生成して返す関数です。この関数は、大量のデータの中から特定の情報だけを効率的に抽出したい場合に非常に役立ちます。
例えば、複数のユーザー情報が格納された配列があり、そこから全ユーザーのIDだけ、あるいは名前だけをリストアップしたいといった状況で利用されます。第一引数には処理対象となる多次元配列を指定します。第二引数には、抽出したい列のキー(文字列または整数)を指定します。このキーに一致する値が、結果として得られる新しい配列の要素となります。もし第二引数に null
を指定した場合、各行全体が要素として返されますが、通常は特定の列の値を抽出するためにキーを指定します。
さらに、オプションとして第三引数を指定することも可能です。この第三引数には、結果として得られる一次元配列のキーとして使用したい列のキーを指定します。これにより、抽出された値が、指定した列の値をキーとする連想配列として整形されます。
この関数は、データベースから取得した結果セットのような配列を加工する際や、特定の属性を持つデータのリストを作成する際に非常に効率的な手段を提供します。これにより、多次元配列から必要なデータだけを抽出するコードを簡潔に記述することが可能となり、データの集計やレポート作成などの処理を容易にします。
基本的な使い方
構文(syntax)
<?php
$records = [
['id' => 1, 'first_name' => 'Alice', 'email' => 'alice@example.com'],
['id' => 2, 'first_name' => 'Bob', 'email' => 'bob@example.com'],
['id' => 3, 'first_name' => 'Charlie', 'email' => 'charlie@example.com']
];
$firstNames = array_column($records, 'first_name');
// $firstNames の値は ['Alice', 'Bob', 'Charlie'] となります。
?>
引数(parameters)
array $array, string|int|null $column_key, string|int|null $index_key = null
- array $array: 値を取得する対象となる配列
- string|int|null $column_key: 各配列要素から取得したい値のキー
- string|int|null $index_key = null: 各配列要素のインデックスとして使用する値のキー
戻り値(return)
array
多次元配列から特定の列(カラム)の値を抽出し、新しい一次元配列として返します。
サンプルコード
PHP array_column
で多次元配列を操作する
<?php
/**
* array_column() 関数の基本的な使用例を示します。
* 多次元配列から指定された列の値を取得したり、新しい配列のキーを設定したりします。
*
* システムエンジニアを目指す初心者の方へ:
* array_column() は、データベースのクエリ結果のような多次元配列から
* 特定のデータだけを抽出したり、データを整理したりする際に非常に便利な関数です。
*/
// サンプルとして使用する多次元配列を定義します。
// 各要素が連想配列で、ユーザーの情報を含んでいます。
$users = [
['id' => 101, 'name' => 'Alice', 'email' => 'alice@example.com', 'age' => 30],
['id' => 102, 'name' => 'Bob', 'email' => 'bob@example.com', 'age' => 24],
['id' => 103, 'name' => 'Charlie', 'email' => 'charlie@example.com', 'age' => 35],
['id' => 104, 'name' => 'David', 'email' => 'david@example.com', 'age' => 29],
];
echo "--- 元の多次元配列 ---\n";
print_r($users);
echo "\n";
// ----------------------------------------------------
// 1. 特定の列('name')の値を全て取得する
// 結果は、指定された列の値のみを持つシンプルな配列になります。
// ----------------------------------------------------
$names = array_column($users, 'name');
echo "--- ユーザーの名前だけを抽出 ---\n";
print_r($names);
echo "\n";
// ----------------------------------------------------
// 2. 特定の列('email')の値を全て取得し、別の列('id')を結果の配列のキーにする
// 結果は、IDをキーとし、メールアドレスを値とする連想配列になります。
// ----------------------------------------------------
$emailsById = array_column($users, 'email', 'id');
echo "--- ユーザーのメールアドレスをIDをキーとして抽出 ---\n";
print_r($emailsById);
echo "\n";
// ----------------------------------------------------
// 3. 行全体の配列を取得し、特定の列('name')を結果の配列のキーにする
// 'column_key' に null を指定すると、各行の配列全体が値として取得されます。
// ----------------------------------------------------
$usersByName = array_column($users, null, 'name');
echo "--- ユーザーの全データを名前をキーとして抽出 ---\n";
print_r($usersByName);
echo "\n";
// ----------------------------------------------------
// 4. 数値キーの多次元配列の場合
// 数値キーを持つ列を指定することも可能です。
// ----------------------------------------------------
$products = [
[1, 'Laptop', 1200],
[2, 'Mouse', 25],
[3, 'Keyboard', 75],
];
// 'products'配列の2番目の要素(インデックス1)である商品名を抽出
$productNames = array_column($products, 1);
echo "--- 数値キーの配列から商品名を抽出 ---\n";
print_r($productNames);
echo "\n";
// 'products'配列の2番目の要素(インデックス1)である商品名を抽出し、
// 1番目の要素(インデックス0)であるIDをキーにする
$productsById = array_column($products, 1, 0);
echo "--- 数値キーの配列から商品名をIDをキーとして抽出 ---\n";
print_r($productsById);
echo "\n";
PHPの array_column
関数は、多次元配列から特定のキーを持つ値だけを抽出し、新しい配列を生成する機能を提供します。データベースから取得したレコード一覧のような、構造化された配列データを効率的に操作する際に非常に役立ちます。
第一引数には、操作対象となる多次元配列を指定します。第二引数 $column_key
には、抽出したい値が含まれる列のキー(文字列または数値)を指定します。これにより、指定したキーに対応する値の一覧が配列として得られます。
第三引数 $index_key
はオプションで、結果として生成される新しい配列の各要素のキーとして使用する列を指定できます。例えば、ユーザーIDをキー、メールアドレスを値とするような連想配列を作成する際に役立ちます。この引数を省略した場合、キーは0から始まる連番になります。
また、第二引数 $column_key
に null
を指定すると、元の配列の要素全体を値として保持し、第三引数で指定したキーで再構成した配列を得ることも可能です。この関数の戻り値は、これらの処理によって抽出・再構成された新しい配列です。
array_column
関数でキーを指定する第3引数($index_key
)の値が元の配列内で重複している場合、後の値が前の値を上書きしてしまうため注意が必要です。例えば、同じ名前のユーザーがいる配列で名前をキーにすると、最後のユーザーのデータしか残りません。また、第2引数($column_key
)や第3引数で指定したキーが存在しない配列要素は、結果に含まれなくなります。意図せずデータが失われる可能性があるため、入力する配列のデータ構造をよく確認してから使用することが大切です。この関数は、各要素が同じキーを持つ多次元配列を扱う際に特に便利です。
PHP array_column
で複数レコードから値を取得する
<?php
/**
* array_column 関数の様々な使い方をデモンストレーションします。
* 主に、複数のデータレコード(行)から指定したカラム(列)の値を効率的に抽出する方法を示します。
*
* @param array $data 処理対象となる多次元配列(連想配列の配列など)
* @return void
*/
function demonstrateArrayColumnMultipleUses(array $data): void
{
echo "--- 元のデータ配列 ---\n";
print_r($data);
// 1. 複数のレコードから特定の単一カラム(例: 'name')の値のみを抽出する
// これは array_column の最も基本的な使い方で、"複数"のレコードから値を集める典型例です。
$names = array_column($data, 'name');
echo "\n--- 1. 全ての 'name' カラムの値 ---\n";
echo "(複数の商品から名前のみを抽出)\n";
print_r($names);
// 2. 複数のレコードから特定の単一カラム(例: 'price')の値のみを抽出し、
// 別のカラム(例: 'id')の値を結果配列のキーとして使用する
// これにより、IDに対応する価格を直接参照できる連想配列が得られます。
$pricesById = array_column($data, 'price', 'id');
echo "\n--- 2. 'id' をキーにした 'price' カラムの値 ---\n";
echo "(複数の商品のIDと価格を対応付け)\n";
print_r($pricesById);
// 3. 複数のレコードから特定の単一カラム(例: 'category')の値のみを抽出し、
// 別のカラム(例: 'name')の値を結果配列のキーとして使用する
// キーとして指定したカラムに重複する値がある場合、後から出現したレコードの値で上書きされます。
$categoryByName = array_column($data, 'category', 'name');
echo "\n--- 3. 'name' をキーにした 'category' カラムの値 (キー重複に注意) ---\n";
echo "(複数の商品の名前とカテゴリを対応付け。もし名前が重複すれば上書き)\n";
print_r($categoryByName);
// 4. column_key に null を指定し、index_key を指定した場合
// これは、指定した index_key の値をキーとして、元のレコード(行全体)を新しい配列の値として取得します。
// "複数"のレコード全体を別のキーで整理したい場合に便利です。
$fullRowsById = array_column($data, null, 'id');
echo "\n--- 4. 'id' をキーにしたレコード全体 ---\n";
echo "(複数のレコードをIDで検索できるよう再構成)\n";
print_r($fullRowsById);
}
// サンプルデータ: 複数の商品情報を持つ配列
$products = [
['id' => 101, 'name' => 'Apple', 'category' => 'Fruit', 'price' => 150],
['id' => 102, 'name' => 'Banana', 'category' => 'Fruit', 'price' => 80],
['id' => 103, 'name' => 'Carrot', 'category' => 'Vegetable', 'price' => 70],
['id' => 104, 'name' => 'Milk', 'category' => 'Dairy', 'price' => 220],
['id' => 105, 'name' => 'Egg', 'category' => 'Dairy', 'price' => 300],
['id' => 106, 'name' => 'Apple', 'category' => 'Fruit', 'price' => 180], // 名前が重複
];
// 関数を実行してデモンストレーション
demonstrateArrayColumnMultipleUses($products);
?>
array_column
関数は、PHP 8で利用できる拡張機能の一つで、複数のデータレコード(行)を格納した多次元配列から、指定されたカラム(列)の値を効率的に抽出するために使用されます。システムエンジニアを目指す初心者の方にとって、大量のデータの中から必要な情報だけを取り出す際に非常に役立ちます。
この関数は主に3つの引数を取ります。最初の$array
は、処理対象となる連想配列の配列のような多次元配列を指定します。2つ目の$column_key
は、抽出したいカラムの名前(文字列)またはインデックス(整数)を指定します。ここにnull
を指定すると、各レコード全体を抽出対象とします。3つ目の$index_key
はオプションで、結果の配列のキーとして使用したいカラムの名前またはインデックスを指定します。指定しない場合、結果配列のキーは0から始まる数値インデックスとなります。戻り値は、抽出された値を含む新しい配列です。
サンプルコードでは、まず複数の商品情報から全ての商品の名前だけを抽出する基本的な使い方を示しています。次に、商品のIDをキーとして価格を抽出したり、名前をキーとしてカテゴリを抽出する方法を紹介しています。$index_key
に指定したカラムの値が重複する場合、後から出現したレコードの値で上書きされる点にご注意ください。さらに、$column_key
にnull
を指定し$index_key
を組み合わせることで、商品のIDをキーとして商品レコード全体を新しい配列として再構成することも可能です。このように、複数のレコードから目的に合わせて様々な形式で情報を抽出できます。
array_column
関数は、複数のレコードから特定の「列」の値を効率的に抽出する際に役立ちます。第一引数で処理対象の多次元配列を、第二引数で抽出したい列名(またはインデックス)を指定します。第三引数に別の列名(またはインデックス)を指定すると、その値が結果配列のキーとして使用されます。ただし、このキーとなる値が重複した場合、後から出現したレコードの値で上書きされてしまうため、意図しないデータの上書きに注意が必要です。また、第二引数にnull
を指定すると、レコード全体を結果の値として取得し、指定したキーで配列を再構築できます。これは、特定のIDなどでレコードを素早く参照したい場合に特に便利です。