Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】array_column()関数の使い方

array_column関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

array_column関数は、複数の連想配列やインデックス配列からなる多次元配列(配列の配列)から、特定のキー(カラム)に対応する全ての値を取り出し、それらを要素とする新しい一次元配列を生成して返す関数です。この関数は、大量のデータの中から特定の情報だけを効率的に抽出したい場合に非常に役立ちます。

例えば、複数のユーザー情報が格納された配列があり、そこから全ユーザーのIDだけ、あるいは名前だけをリストアップしたいといった状況で利用されます。第一引数には処理対象となる多次元配列を指定します。第二引数には、抽出したい列のキー(文字列または整数)を指定します。このキーに一致する値が、結果として得られる新しい配列の要素となります。もし第二引数に null を指定した場合、各行全体が要素として返されますが、通常は特定の列の値を抽出するためにキーを指定します。

さらに、オプションとして第三引数を指定することも可能です。この第三引数には、結果として得られる一次元配列のキーとして使用したい列のキーを指定します。これにより、抽出された値が、指定した列の値をキーとする連想配列として整形されます。

この関数は、データベースから取得した結果セットのような配列を加工する際や、特定の属性を持つデータのリストを作成する際に非常に効率的な手段を提供します。これにより、多次元配列から必要なデータだけを抽出するコードを簡潔に記述することが可能となり、データの集計やレポート作成などの処理を容易にします。

構文(syntax)

1<?php
2$records = [
3    ['id' => 1, 'first_name' => 'Alice', 'email' => 'alice@example.com'],
4    ['id' => 2, 'first_name' => 'Bob', 'email' => 'bob@example.com'],
5    ['id' => 3, 'first_name' => 'Charlie', 'email' => 'charlie@example.com']
6];
7
8$firstNames = array_column($records, 'first_name');
9
10// $firstNames の値は ['Alice', 'Bob', 'Charlie'] となります。
11?>

引数(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で多次元配列から列を抽出する

1<?php
2
3/**
4 * array_column の使用例: 多次元配列から特定の列を抽出する
5 *
6 * このスクリプトは、array_column 関数を使用して、
7 * 多次元配列から指定されたキーを持つすべての値の配列を抽出する方法を示します。
8 * また、抽出した配列のキーとして別の列の値を使用する方法も示します。
9 */
10
11// サンプルとなる多次元配列を定義します。
12// 各要素は、'id', 'name', 'city' のキーを持つ連想配列です。
13$records = [
14    ['id' => 101, 'name' => 'Alice', 'city' => 'New York'],
15    ['id' => 102, 'name' => 'Bob', 'city' => 'London'],
16    ['id' => 103, 'name' => 'Charlie', 'city' => 'Paris'],
17    ['id' => 104, 'name' => 'Diana', 'city' => 'New York'],
18];
19
20echo "<h3>元の多次元配列:</h3>";
21echo "<pre>";
22print_r($records);
23echo "</pre>";
24
25// 1. 全てのレコードから 'name' 列の値を抽出する
26// 結果は、'name' の値だけを含む一次元配列になります。
27$names = array_column($records, 'name');
28
29echo "<h3>'name' 列のみを抽出:</h3>";
30echo "<pre>";
31print_r($names);
32echo "</pre>";
33// 期待される出力:
34// Array
35// (
36//     [0] => Alice
37//     [1] => Bob
38//     [2] => Charlie
39//     [3] => Diana
40// )
41
42// 2. 全てのレコードから 'city' 列の値を抽出し、'id' 列の値をキーとして使用する
43// 結果は、'city' の値を含む一次元配列で、キーは元のレコードの 'id' の値になります。
44$citiesById = array_column($records, 'city', 'id');
45
46echo "<h3>'city' 列を抽出し、'id' をキーとして使用:</h3>";
47echo "<pre>";
48print_r($citiesById);
49echo "</pre>";
50// 期待される出力:
51// Array
52// (
53//     [101] => New York
54//     [102] => London
55//     [103] => Paris
56//     [104] => New York
57// )
58
59// 3. 'id' 列のみを抽出する(キーを指定しない場合)
60// 抽出する列として 'id' を指定し、インデックスキーは指定しないため、
61// デフォルトの数値キーを持つ配列が返されます。
62$ids = array_column($records, 'id');
63
64echo "<h3>'id' 列のみを抽出 (キーなし):</h3>";
65echo "<pre>";
66print_r($ids);
67echo "</pre>";
68// 期待される出力:
69// Array
70// (
71//     [0] => 101
72//     [1] => 102
73//     [2] => 103
74//     [3] => 104
75// )
76
77?>

PHPのarray_column関数は、多次元配列から特定の「列」(キーを持つ値のセット)を効率的に抽出するための機能です。複数のレコードが格納された配列から、ある項目だけのリストを簡潔に作成したい場合に非常に役立ちます。

この関数は、最初の引数$arrayで操作対象となる多次元配列を受け取ります。2番目の引数$column_keyには、抽出したい列のキー(名前)を指定します。例えば、サンプルコードの$records配列からユーザー名だけを取り出したい場合は'name'を指定します。これにより、指定したキーの値だけが並んだ新しい一次元配列が戻り値として返されます。

3番目の引数$index_keyはオプションで、抽出される配列のキーとして、元の配列の別の列の値を使用したい場合に指定します。サンプルコードでは、ユーザーの都市名('city')を抽出しつつ、その配列のキーとしてユーザーID('id')を使用しています。この指定をすることで、['id'の値 => 'city'の値, ...]という形式の配列が生成されます。

array_column関数は常に一次元配列を返します。この関数を用いることで、多次元配列から必要なデータだけを取り出し、加工する処理を、複雑なループ処理を書くことなく簡潔に実装できます。

array_column関数は、多次元配列から指定されたキーの値を抽出し、一次元配列として返します。第2引数で抽出したい列のキー(column_key)を正しく指定してください。このキーが元の配列に存在しない場合、そのレコードは結果配列に含まれません。第3引数で、抽出された配列のキーとして利用する別の列のキー(index_key)を指定できますが、省略すると数値インデックスになります。index_keyに指定した値が複数のレコードで重複した場合、後から処理された値で上書きされてしまい、データが失われる可能性がありますので特に注意が必要です。利用する際は、キーの存在や重複を考慮し、意図した結果が得られるか確認することが大切です。

PHP array_column で多次元配列を操作する

1<?php
2
3/**
4 * array_column() 関数の基本的な使用例を示します。
5 * 多次元配列から指定された列の値を取得したり、新しい配列のキーを設定したりします。
6 *
7 * システムエンジニアを目指す初心者の方へ:
8 * array_column() は、データベースのクエリ結果のような多次元配列から
9 * 特定のデータだけを抽出したり、データを整理したりする際に非常に便利な関数です。
10 */
11
12// サンプルとして使用する多次元配列を定義します。
13// 各要素が連想配列で、ユーザーの情報を含んでいます。
14$users = [
15    ['id' => 101, 'name' => 'Alice', 'email' => 'alice@example.com', 'age' => 30],
16    ['id' => 102, 'name' => 'Bob', 'email' => 'bob@example.com', 'age' => 24],
17    ['id' => 103, 'name' => 'Charlie', 'email' => 'charlie@example.com', 'age' => 35],
18    ['id' => 104, 'name' => 'David', 'email' => 'david@example.com', 'age' => 29],
19];
20
21echo "--- 元の多次元配列 ---\n";
22print_r($users);
23echo "\n";
24
25// ----------------------------------------------------
26// 1. 特定の列('name')の値を全て取得する
27//    結果は、指定された列の値のみを持つシンプルな配列になります。
28// ----------------------------------------------------
29$names = array_column($users, 'name');
30echo "--- ユーザーの名前だけを抽出 ---\n";
31print_r($names);
32echo "\n";
33
34// ----------------------------------------------------
35// 2. 特定の列('email')の値を全て取得し、別の列('id')を結果の配列のキーにする
36//    結果は、IDをキーとし、メールアドレスを値とする連想配列になります。
37// ----------------------------------------------------
38$emailsById = array_column($users, 'email', 'id');
39echo "--- ユーザーのメールアドレスをIDをキーとして抽出 ---\n";
40print_r($emailsById);
41echo "\n";
42
43// ----------------------------------------------------
44// 3. 行全体の配列を取得し、特定の列('name')を結果の配列のキーにする
45//    'column_key' に null を指定すると、各行の配列全体が値として取得されます。
46// ----------------------------------------------------
47$usersByName = array_column($users, null, 'name');
48echo "--- ユーザーの全データを名前をキーとして抽出 ---\n";
49print_r($usersByName);
50echo "\n";
51
52// ----------------------------------------------------
53// 4. 数値キーの多次元配列の場合
54//    数値キーを持つ列を指定することも可能です。
55// ----------------------------------------------------
56$products = [
57    [1, 'Laptop', 1200],
58    [2, 'Mouse', 25],
59    [3, 'Keyboard', 75],
60];
61
62// 'products'配列の2番目の要素(インデックス1)である商品名を抽出
63$productNames = array_column($products, 1);
64echo "--- 数値キーの配列から商品名を抽出 ---\n";
65print_r($productNames);
66echo "\n";
67
68// 'products'配列の2番目の要素(インデックス1)である商品名を抽出し、
69// 1番目の要素(インデックス0)であるIDをキーにする
70$productsById = array_column($products, 1, 0);
71echo "--- 数値キーの配列から商品名をIDをキーとして抽出 ---\n";
72print_r($productsById);
73echo "\n";

PHPの array_column 関数は、多次元配列から特定のキーを持つ値だけを抽出し、新しい配列を生成する機能を提供します。データベースから取得したレコード一覧のような、構造化された配列データを効率的に操作する際に非常に役立ちます。

第一引数には、操作対象となる多次元配列を指定します。第二引数 $column_key には、抽出したい値が含まれる列のキー(文字列または数値)を指定します。これにより、指定したキーに対応する値の一覧が配列として得られます。

第三引数 $index_key はオプションで、結果として生成される新しい配列の各要素のキーとして使用する列を指定できます。例えば、ユーザーIDをキー、メールアドレスを値とするような連想配列を作成する際に役立ちます。この引数を省略した場合、キーは0から始まる連番になります。

また、第二引数 $column_keynull を指定すると、元の配列の要素全体を値として保持し、第三引数で指定したキーで再構成した配列を得ることも可能です。この関数の戻り値は、これらの処理によって抽出・再構成された新しい配列です。

array_column関数でキーを指定する第3引数($index_key)の値が元の配列内で重複している場合、後の値が前の値を上書きしてしまうため注意が必要です。例えば、同じ名前のユーザーがいる配列で名前をキーにすると、最後のユーザーのデータしか残りません。また、第2引数($column_key)や第3引数で指定したキーが存在しない配列要素は、結果に含まれなくなります。意図せずデータが失われる可能性があるため、入力する配列のデータ構造をよく確認してから使用することが大切です。この関数は、各要素が同じキーを持つ多次元配列を扱う際に特に便利です。

PHP array_columnで複数レコードから値を取得する

1<?php
2
3/**
4 * array_column 関数の様々な使い方をデモンストレーションします。
5 * 主に、複数のデータレコード(行)から指定したカラム(列)の値を効率的に抽出する方法を示します。
6 *
7 * @param array $data 処理対象となる多次元配列(連想配列の配列など)
8 * @return void
9 */
10function demonstrateArrayColumnMultipleUses(array $data): void
11{
12    echo "--- 元のデータ配列 ---\n";
13    print_r($data);
14
15    // 1. 複数のレコードから特定の単一カラム(例: 'name')の値のみを抽出する
16    //    これは array_column の最も基本的な使い方で、"複数"のレコードから値を集める典型例です。
17    $names = array_column($data, 'name');
18    echo "\n--- 1. 全ての 'name' カラムの値 ---\n";
19    echo "(複数の商品から名前のみを抽出)\n";
20    print_r($names);
21
22    // 2. 複数のレコードから特定の単一カラム(例: 'price')の値のみを抽出し、
23    //    別のカラム(例: 'id')の値を結果配列のキーとして使用する
24    //    これにより、IDに対応する価格を直接参照できる連想配列が得られます。
25    $pricesById = array_column($data, 'price', 'id');
26    echo "\n--- 2. 'id' をキーにした 'price' カラムの値 ---\n";
27    echo "(複数の商品のIDと価格を対応付け)\n";
28    print_r($pricesById);
29
30    // 3. 複数のレコードから特定の単一カラム(例: 'category')の値のみを抽出し、
31    //    別のカラム(例: 'name')の値を結果配列のキーとして使用する
32    //    キーとして指定したカラムに重複する値がある場合、後から出現したレコードの値で上書きされます。
33    $categoryByName = array_column($data, 'category', 'name');
34    echo "\n--- 3. 'name' をキーにした 'category' カラムの値 (キー重複に注意) ---\n";
35    echo "(複数の商品の名前とカテゴリを対応付け。もし名前が重複すれば上書き)\n";
36    print_r($categoryByName);
37
38    // 4. column_key に null を指定し、index_key を指定した場合
39    //    これは、指定した index_key の値をキーとして、元のレコード(行全体)を新しい配列の値として取得します。
40    //    "複数"のレコード全体を別のキーで整理したい場合に便利です。
41    $fullRowsById = array_column($data, null, 'id');
42    echo "\n--- 4. 'id' をキーにしたレコード全体 ---\n";
43    echo "(複数のレコードをIDで検索できるよう再構成)\n";
44    print_r($fullRowsById);
45}
46
47// サンプルデータ: 複数の商品情報を持つ配列
48$products = [
49    ['id' => 101, 'name' => 'Apple', 'category' => 'Fruit', 'price' => 150],
50    ['id' => 102, 'name' => 'Banana', 'category' => 'Fruit', 'price' => 80],
51    ['id' => 103, 'name' => 'Carrot', 'category' => 'Vegetable', 'price' => 70],
52    ['id' => 104, 'name' => 'Milk', 'category' => 'Dairy', 'price' => 220],
53    ['id' => 105, 'name' => 'Egg', 'category' => 'Dairy', 'price' => 300],
54    ['id' => 106, 'name' => 'Apple', 'category' => 'Fruit', 'price' => 180], // 名前が重複
55];
56
57// 関数を実行してデモンストレーション
58demonstrateArrayColumnMultipleUses($products);
59
60?>

array_column関数は、PHP 8で利用できる拡張機能の一つで、複数のデータレコード(行)を格納した多次元配列から、指定されたカラム(列)の値を効率的に抽出するために使用されます。システムエンジニアを目指す初心者の方にとって、大量のデータの中から必要な情報だけを取り出す際に非常に役立ちます。

この関数は主に3つの引数を取ります。最初の$arrayは、処理対象となる連想配列の配列のような多次元配列を指定します。2つ目の$column_keyは、抽出したいカラムの名前(文字列)またはインデックス(整数)を指定します。ここにnullを指定すると、各レコード全体を抽出対象とします。3つ目の$index_keyはオプションで、結果の配列のキーとして使用したいカラムの名前またはインデックスを指定します。指定しない場合、結果配列のキーは0から始まる数値インデックスとなります。戻り値は、抽出された値を含む新しい配列です。

サンプルコードでは、まず複数の商品情報から全ての商品の名前だけを抽出する基本的な使い方を示しています。次に、商品のIDをキーとして価格を抽出したり、名前をキーとしてカテゴリを抽出する方法を紹介しています。$index_keyに指定したカラムの値が重複する場合、後から出現したレコードの値で上書きされる点にご注意ください。さらに、$column_keynullを指定し$index_keyを組み合わせることで、商品のIDをキーとして商品レコード全体を新しい配列として再構成することも可能です。このように、複数のレコードから目的に合わせて様々な形式で情報を抽出できます。

array_column関数は、複数のレコードから特定の「列」の値を効率的に抽出する際に役立ちます。第一引数で処理対象の多次元配列を、第二引数で抽出したい列名(またはインデックス)を指定します。第三引数に別の列名(またはインデックス)を指定すると、その値が結果配列のキーとして使用されます。ただし、このキーとなる値が重複した場合、後から出現したレコードの値で上書きされてしまうため、意図しないデータの上書きに注意が必要です。また、第二引数にnullを指定すると、レコード全体を結果の値として取得し、指定したキーで配列を再構築できます。これは、特定のIDなどでレコードを素早く参照したい場合に特に便利です。

PHP array_column で重複を処理する

1<?php
2
3/**
4 * array_column を使って、多次元配列から列を抽出し、
5 * その中に含まれる重複データへの対応方法を示すサンプルコードです。
6 * システムエンジニアを目指す初心者向けに、簡潔に記述されています。
7 */
8function handleArrayColumnWithDuplicates(): void
9{
10    // 重複する 'category' を含む商品データ配列を定義します。
11    $products = [
12        ['id' => 1, 'name' => 'Laptop', 'category' => 'Electronics'],
13        ['id' => 2, 'name' => 'Keyboard', 'category' => 'Electronics'],
14        ['id' => 3, 'name' => 'Mouse', 'category' => 'Electronics'],
15        ['id' => 4, 'name' => 'Desk Chair', 'category' => 'Furniture'],
16        ['id' => 5, 'name' => 'Monitor', 'category' => 'Electronics'],
17        ['id' => 6, 'name' => 'Bookshelf', 'category' => 'Furniture'],
18    ];
19
20    echo "--- 'category' 列を抽出 (重複あり) ---" . PHP_EOL;
21    // 'category' 列の値をすべて抽出します。結果には重複したカテゴリ名が含まれます。
22    $categoriesWithDuplicates = array_column($products, 'category');
23    print_r($categoriesWithDuplicates);
24    echo PHP_EOL;
25
26    echo "--- ユニークな 'category' 列を抽出 (重複なし) ---" . PHP_EOL;
27    // 抽出されたカテゴリ名から array_unique() を使用して重複を除去します。
28    $uniqueCategories = array_unique($categoriesWithDuplicates);
29    print_r($uniqueCategories);
30    echo PHP_EOL;
31
32    // array_column の第3引数 (index_key) を使って、
33    // 抽出される配列のキーを指定する際の重複の挙動を示します。
34    // 以下のデータでは 'id' が重複しています。
35    // キーが重複する場合、後から登場する値で上書きされます。
36    $productsWithDuplicateId = [
37        ['id' => 1, 'name' => 'Laptop'],
38        ['id' => 2, 'name' => 'Keyboard'],
39        ['id' => 3, 'name' => 'Mouse'],
40        ['id' => 2, 'name' => 'Wireless Mouse'], // ID '2' が重複
41    ];
42
43    echo "--- 'id' をキーとして 'name' 列を抽出 (重複IDは上書き) ---" . PHP_EOL;
44    // 'id' をキーに 'name' 列を抽出します。
45    // ID '2' のキーは、最後の値である 'Wireless Mouse' で上書きされます。
46    $namesIndexedById = array_column($productsWithDuplicateId, 'name', 'id');
47    print_r($namesIndexedById);
48    echo PHP_EOL;
49}
50
51// 関数を実行します。
52handleArrayColumnWithDuplicates();

PHPのarray_column関数は、複数の配列を含む多次元配列から、指定したキーを持つ列の値だけを抜き出し、新しい一次元配列として返す機能を提供します。第1引数には対象の多次元配列、第2引数には抽出したい列のキー(文字列または整数)を指定します。戻り値は、抽出された値のみを含む配列です。

サンプルコードでは、まず商品データから「category」列を抽出しています。この際、同じ「Electronics」が複数含まれるように、array_columnは重複する値もそのまま抽出します。もし重複を取り除き、ユニークなカテゴリだけが必要な場合は、array_columnで得られた結果をさらにarray_unique関数に渡すことで実現できます。

array_columnにはオプションの第3引数があり、これを指定すると抽出結果の配列のキーとして別の列の値を使用できます。サンプルコードの後半では、商品の「id」をキーとして「name」列を抽出しています。ここで注意が必要なのは、指定したキー(この場合は「id」)に重複があった場合です。array_columnは、同じキーが複数出現すると、後から登場する値でそのキーの値を上書きします。したがって、結果の配列には、重複するキーのうち最後に処理された値が残ります。この挙動は、データの一意性を考慮する際に重要です。

array_column関数は、指定された列の値をすべて抽出するため、結果には重複する値が含まれる点に注意が必要です。ユニークな値のみが必要な場合は、抽出後にarray_unique()関数を別途適用してください。

また、array_columnの第3引数でインデックスキーを指定する際、そのキーが元の配列内で重複していると、後から現れる値で前の値が上書きされてしまいます。これにより、意図せずデータが失われる可能性があるため、キーに指定する値は一意であることを確認するか、この上書きの挙動を理解した上で利用してください。抽出対象の列やキーが存在しない場合は、その要素は結果に含まれません。

関連コンテンツ

関連プログラミング言語