分かりやすく、使いやすく。

連想配列から特定のキーの値を取り出して配列を作成する方法

スポンサーリンク

PHP で連想配列(ハッシュ)から特定のキーの値をすべて取り出して、新しい配列を作成するには array_column を使用します。

  1. 連想配列から特定のキーの値を取り出して配列にする
  2. 連想配列の特定のキーの値をキーとし、別のキーの値を値とする配列を作成する


連想配列から特定のキーの値を取り出して配列にする

サンプルコードは次の通りです。

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 配列を作成
$ary = 
    array(
        array('id'=>1,  'name'=>'太郎',   'age'=>20, 'rank'=>'A'),
        array('id'=>5,  'name'=>'花子',   'age'=>52, 'rank'=>'C'),
        array('id'=>35, 'name'=>'ジョン', 'age'=>6,  'rank'=>'D'),
        array('id'=>20, 'name'=>'ケン',   'age'=>31, 'rank'=>'S'),
        array('id'=>11, 'name'=>'三太夫', 'age'=>79, 'rank'=>'A'),
    );
 
//name だけを取り出して配列にする。
$ary_names = array_column($ary, 'name');
 
//中身を確認
foreach($ary_names as $str_name){
    print $str_name . PHP_EOL;
} 

上記の実行結果は次の通りです。

太郎
花子
ジョン
ケン
三太夫 

連想配列の特定のキーの値をキーとし、別のキーの値を値とする配列を作成する

array_column では単純な配列ではなく、元の連想配列の値をキーとする配列(または連想配列)を作成することもできます。サンプルコードは次の通りです。

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 配列を作成
$ary = 
    array(
        array('id'=>1,  'name'=>'太郎',   'age'=>20, 'rank'=>'A'),
        array('id'=>5,  'name'=>'花子',   'age'=>52, 'rank'=>'C'),
        array('id'=>35, 'name'=>'ジョン', 'age'=>6,  'rank'=>'D'),
        array('id'=>20, 'name'=>'ケン',   'age'=>20, 'rank'=>'S'),
        array('id'=>11, 'name'=>'三太夫', 'age'=>79, 'rank'=>'A'),
    );
 
//id をキー、name を値として取り出して配列にする。
$ary_names = array_column($ary, 'name', 'id');
 
//中身を確認
var_export($ary_names); 

上記の実行結果は次の通りです。

array (
  1 => '太郎',
  5 => '花子',
  35 => 'ジョン',
  20 => 'ケン',
  11 => '三太夫',
) 

キーとする値に重複する値が含まれる場合、重複したキーについては値が上書きされるので注意が必要です。次のサンプルコードでは、 age をキーとして配列を作成しますが、 20 が重複している為、 age が 20 の太郎についてはケンで上書きされます。

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 配列を作成
$ary = 
    array(
        array('id'=>1,  'name'=>'太郎',   'age'=>20, 'rank'=>'A'),
        array('id'=>5,  'name'=>'花子',   'age'=>52, 'rank'=>'C'),
        array('id'=>35, 'name'=>'ジョン', 'age'=>6,  'rank'=>'D'),
        array('id'=>18, 'name'=>'ケン',   'age'=>20, 'rank'=>'S'),
        array('id'=>11, 'name'=>'三太夫', 'age'=>79, 'rank'=>'A'),
    );
 
//id をキー、name を値として取り出して連想配列にする。
$ary_names = array_column($ary, 'name', 'age');
 
//中身を確認
var_export($ary_names); 

上記の実行結果は次の通りです。

array (
  20 => 'ケン',
  52 => '花子',
  6 => 'ジョン',
  79 => '三太夫',
) 

array_column を使用すると、 array_multisort で多次元配列をソートする際のキーを配列として簡単に取得することができます。多次元配列のソートについては、二次元配列をソートキーを指定して並び替える方法 を参照してください。

スポンサーリンク
スポンサーリンク