こんにちはフロントエンドエンジニアのまさにょんです!
今回は、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!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!