PHPの array_column array_combine は超便利

By | 2018/12/28

PHPでデータベースを読み書きして操作していると、連想配列が配列になった以下のような配列からデータを取り出して操作する事が多いと思います。

$rec = array(
	array(
		'id' => '1001',
		'name' => 'りんご',
		'area' => '青森'
	),
	array(
		'id' => '1002',
		'name' => '梨',
		'area' => '鳥取'
	),
	array(
		'id' => '1003',
		'name' => 'ぶどう',
		'area' => '山梨'
	)
);

たとえば、areaの配列を取り出したいとき

foreachを使うと以下のようになりますが。

$ary = array();
foreach ($rec as $d) {
	$ary[] = $d['area'];
}

これを array_column を使うとこう書けます。

$ary = array_column($rec, 'area');

結果はこう

$ary = array(
	'青森',
	'鳥取',
	'山梨'
);

また、idをキーにしたnameの配列を取り出したいときは array_column の第2引数にキーにしたい項目のキー名を指定します

foreachだと以下のように書きますが

$ary = array();
foreach ($rec as $d) {
	$ary[$d['id']] = $d['name'];
}

これを array_column を使うとこう書けます。

$ary = array_column($rec, 'name', 'id');

結果はこう

$ary = array(
	'1001' => 'りんご',
	'1002' => '梨',
	'1003' => 'ぶどう'
);

また、idをキーにして$recの各項目のArrayをそのまま保持した配列を取り出したいときは、array_combine という第1引数の配列をキーにして、第2引数の配列を値として1つの配列を組み立てる関数を array_column と組み合わせて使うと簡単です。

foreachだと以下のように書きますが

$ary = array();
foreach ($rec as $d) {
	$ary[$d['id']] = $d;
}

これを array_column と array_combine を使ってこう書けます。

$ary = array_combine(array_column($rec, 'id'), $rec);

結果はこう

$ary = array(
	'1001' => array(
		'id' => '1001',
		'name' => 'りんご',
		'area' => '青森'
	),
	'1002' => array(
		'id' => '1002',
		'name' => '梨',
		'area' => '鳥取'
	),
	'1003' => array(
		'id' => '1003',
		'name' => 'ぶどう',
		'area' => '山梨'
	)
);

コーディングがシンプルに、かつ見通しが良くなるので積極的に使っていきたいお勧め手法です。