php 二次元配列から特定のキーを指定して配列を作成する

  • 作成日 2021.01.05
  • php
php 二次元配列から特定のキーを指定して配列を作成する

phpで、array_columnを使用して、二次元配列から特定のキーを指定して配列を作成するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Linux release 8.0.1905 (Core)
  • php 8.0.0
  • nginx 1.14.1

array_column使い方

array_columnを使用すれば、二次元配列から特定のキーを指定して配列を作成することが可能です。

array_column(配列, キー名);

以下は、二次元配列から特定のキーを指定して配列を作成するサンプルコードとなります。

<?php

$arr = [
    [
        "date" => "2021/01/01",
        "num" => 10,
        "dayofweek" => "fri",
    ],
    [
        "date" => "2021/01/02",
        "num" => 15,
        "dayofweek" => "sat",
    ],
    [
        "date" => "2021/01/03",
        "num" => 20,
        "dayofweek" => "sun",
    ],
];

$result = array_column($arr, "dayofweek");

print_r($result);

実行結果

Array
(
    [0] => fri
    [1] => sat
    [2] => sun
)

キー名を二次元配列から指定することも可能です。

<?php

$arr = [
    [
        "date" => "2021/01/01",
        "num" => 10,
        "dayofweek" => "fri",
    ],
    [
        "date" => "2021/01/02",
        "num" => 15,
        "dayofweek" => "sat",
    ],
    [
        "date" => "2021/01/03",
        "num" => 20,
        "dayofweek" => "sun",
    ],
];

$result = array_column($arr, "dayofweek", "date");

print_r($result);

実行結果

Array
(
    [2021/01/01] => fri
    [2021/01/02] => sat
    [2021/01/03] => sun
)

第二引数をnullにすることで、値をキーにした連想配列にすることも可能です。

<?php

$arr = [
    [
        "date" => "2021/01/01",
        "num" => 10,
        "dayofweek" => "fri",
    ],
    [
        "date" => "2021/01/02",
        "num" => 15,
        "dayofweek" => "sat",
    ],
    [
        "date" => "2021/01/03",
        "num" => 20,
        "dayofweek" => "sun",
    ],
];

$result = array_column($arr, NULL, "date");

print_r($result);

実行結果

Array
(
    [2021/01/01] => Array
        (
            [date] => 2021/01/01
            [num] => 10
            [dayofweek] => fri
        )

    [2021/01/02] => Array
        (
            [date] => 2021/01/02
            [num] => 15
            [dayofweek] => sat
        )

    [2021/01/03] => Array
        (
            [date] => 2021/01/03
            [num] => 20
            [dayofweek] => sun
        )

)