PHPで多次元配列から特定の値を取得する・操作するための array_column関数の使い方

PHP_array_column

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、PHPで多次元配列から特定の値を取得する・操作するための array_column関数の使い方について解説していきます。

多次元配列から特定の値を取得する・操作するための array_column関数

多次元配列から特定の値を取得する操作をする際は、array_column() が役立ちます。

array_column関数とは?

array_column()は、Setした配列から指定したカラム(key)の値を配列の形で返してくれる関数です。

基本構文は、次のとおりです。

array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array

考え方のポイントは、多次元配列をTable構造と見なして、1つの配列をレコード、1つのフィールド(値・value)のkeyをcolumnと考えている点です。

array_column()に渡した配列から、指定したカラム(key)の値で作った新しい配列を返してくれるので、

多次元配列をシンプルな必要なデータだけの配列に加工して操作したい時に使えます。

多次元配列から array_column で特定の値の新しい配列を作成する

それでは、実際に多次元配列からarray_column()で特定の値の新しい配列を作成するSampleを見ていきます。

index番号(key・column)が「0」(フルーツ名のkey)を指定すると、フルーツ名のデータの配列を新しく生成していることがわかります。

<?php
// 1. 多次元配列 => Tableと見なす
// => 1つの配列がレコード => レコード(配列)の中にはkeyとフィールド(value)が複数ある
$fruits_recodes = [
	['apple','300'],
	['grape','400'],
	['pine','500']
];

// 2. index番号(key・column)が「0」(フルーツ名)のデータの配列を新しく生成する!
$fruits_names = array_column($fruits_recodes, 0);

print_r($fruits_names);
// [ 出力結果 ]
// Array
// (
//     [0] => apple
//     [1] => grape
//     [2] => pine
// )

連想配列の多次元配列から array_column で特定の値(value)の新しい配列を作成する

次に、連想配列の多次元配列からarray_column()で特定の値の新しい配列を作成するSampleを見ていきます。

次のSampleでは、valueが「type」のデータの新しい配列を作成しています。

<?php
// 1. 連想配列の多次元配列
$records = [
    [
        'id' => 1,
        'type' => 'ロボ玉試作1号機',
        'from' => '神聖グンマー帝国',
        'cost' => 2000
    ],
    [
        'id' => 2,
        'type' => 'ロボ玉試作2号機',
        'from' => 'さいたまー共和国',
        'cost' => 3000
    ],
    [
        'id' => 3,
        'type' => 'ロボ玉試作3号機',
        'from' => 'Tokyo',
        'cost' => 5000
    ]
];

// 2. valueが「type」のデータの配列を新しく生成する!
$robotamaType = array_column($records, 'type');
var_export($robotamaType);

// [ 出力結果 ]
// array (
//     0 => 'ロボ玉試作1号機',
//     1 => 'ロボ玉試作2号機',
//     2 => 'ロボ玉試作3号機',
// )

連想配列の多次元配列から array_column で特定の key・value の新しい配列を作成する

連想配列の多次元配列からarray_columnで特定のkey・valueの新しい配列を作成するには、第3引数に設定するkeyとなる値のcolumn(key)を指定します。

次のSampleでは、keyが「from」& valueが「type」のデータの配列を新しく作成しています。

<?php

// 1. 連想配列の多次元配列
$records = [
    [
        'id' => 1,
        'type' => 'ロボ玉試作1号機',
        'from' => '神聖グンマー帝国',
        'cost' => 2000
    ],
    [
        'id' => 2,
        'type' => 'ロボ玉試作2号機',
        'from' => 'さいたまー共和国',
        'cost' => 3000
    ],
    [
        'id' => 3,
        'type' => 'ロボ玉試作3号機',
        'from' => 'Tokyo',
        'cost' => 5000
    ],

];

// 2. keyが「from」& valueが「type」のデータの配列を新しく生成する!
$robotamaType = array_column($records, 'type', 'from');
var_export($robotamaType);
// [ 出力結果 ]
// array (
//     '神聖グンマー帝国' => 'ロボ玉試作1号機',
//     'さいたまー共和国' => 'ロボ玉試作2号機',
//     'Tokyo' => 'ロボ玉試作3号機',
// )


// 新しく作った配列から値を検索する
$key = array_search('ロボ玉試作1号機', $robotamaType, true);

// keyを出力する
var_export($key);
// '神聖グンマー帝国'

// keyからvalueを取得する
var_export($robotamaType[$key]);
// 'ロボ玉試作1号機'

array_column と array_search を組み合わせて、多次元配列のデータを検索する

array_column と array_search を組み合わせることで、多次元配列のデータを検索して、その配列だけを取得することができます。

<?php

$records = [
    [
        'id' => 1,
        'type' => 'ロボ玉試作1号機',
        'from' => '神聖グンマー帝国',
        'cost' => 2000
    ],
    [
        'id' => 2,
        'type' => 'ロボ玉試作2号機',
        'from' => 'さいたまー共和国',
        'cost' => 3000
    ],
    [
        'id' => 3,
        'type' => 'ロボ玉試作3号機',
        'from' => 'Tokyo',
        'cost' => 5000
    ],

];

$key = array_search('ロボ玉試作1号機', array_column($records, 'type'), true);

var_export($records[$key]);
// [ 出力結果 ]
// array (
//     'id' => 1,
//     'type' => 'ロボ玉試作1号機',
//     'from' => '神聖グンマー帝国',
//     'cost' => 2000,
// )

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

PHP / Laravel書籍

最近の投稿