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

二次元配列のインデックスを特定のキーの値に置き換える方法

スポンサーリンク

データベースや XML から抽出したデータを二次元配列で受け取った際など、次のようなデータ構造のインデックスを特定のキーの値に置き換える場合、 array_column を使用します。

対象のデータ構造の例
1
2
3
4
5
6
7
array(
    0 => ['id'=>8,  'name'=>'太郎',   'age'=>20, 'rank'=>'A'],
    1 => ['id'=>5,  'name'=>'花子',   'age'=>52, 'rank'=>'C'],
    2 => ['id'=>35, 'name'=>'ジョン', 'age'=>6,  'rank'=>'D'],
    3 => ['id'=>18, 'name'=>'ケン',   'age'=>20, 'rank'=>'S'],
    4 => ['id'=>11, 'name'=>'三太夫', 'age'=>79, 'rank'=>'A'],
); 

上記のデータはインデックス 0 ~ 4 の配列の中に、 id, name, age, rank をキーとする連想配列が格納されています。このインデックス 0 ~ 4 の部分を連想配列内の id の部分に置き換えるサンプルコードは次の通りです。

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 配列を作成
$ary1 = 
    array(
        0 => ['id'=>8,  'name'=>'太郎',   'age'=>20, 'rank'=>'A'],
        1 => ['id'=>5,  'name'=>'花子',   'age'=>52, 'rank'=>'C'],
        2 => ['id'=>35, 'name'=>'ジョン', 'age'=>6,  'rank'=>'D'],
        3 => ['id'=>18, 'name'=>'ケン',   'age'=>20, 'rank'=>'S'],
        4 => ['id'=>11, 'name'=>'三太夫', 'age'=>79, 'rank'=>'A'],
    );
 
//id をキーとした二次元配列を作成する。
$ary2 = array_column($ary1, NULL, 'id');
 
//中身を確認
var_export($ary2); 

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

array (
  8 =>
  array (
    'id' => 8,
    'name' => '太郎',
    'age' => 20,
    'rank' => 'A',
  ),
  5 =>
  array (
    'id' => 5,
    'name' => '花子',
    'age' => 52,
    'rank' => 'C',
  ),
  35 =>
  array (
    'id' => 35,
    'name' => 'ジョン',
    'age' => 6,
    'rank' => 'D',
  ),
  18 =>
  array (
    'id' => 18,
    'name' => 'ケン',
    'age' => 20,
    'rank' => 'S',
  ),
  11 =>
  array (
    'id' => 11,
    'name' => '三太夫',
    'age' => 79,
    'rank' => 'A',
  ),
) 

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

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
// 配列を作成
$ary1 = 
    array(
        0 => ['id'=>8,  'name'=>'太郎',   'age'=>20, 'rank'=>'A'],
        1 => ['id'=>5,  'name'=>'花子',   'age'=>52, 'rank'=>'C'],
        2 => ['id'=>35, 'name'=>'ジョン', 'age'=>6,  'rank'=>'D'],
        3 => ['id'=>18, 'name'=>'ケン',   'age'=>20, 'rank'=>'S'],
        4 => ['id'=>11, 'name'=>'三太夫', 'age'=>79, 'rank'=>'A'],
    );
 
//id をキーとした二次元配列を作成する。
$ary2 = array_column($ary1, NULL, 'age');
 
//中身を確認
var_export($ary2); 

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

array (
  20 =>
  array (
    'id' => 18,
    'name' => 'ケン',
    'age' => 20,
    'rank' => 'S',
  ),
  52 =>
  array (
    'id' => 5,
    'name' => '花子',
    'age' => 52,
    'rank' => 'C',
  ),
  6 =>
  array (
    'id' => 35,
    'name' => 'ジョン',
    'age' => 6,
    'rank' => 'D',
  ),
  79 =>
  array (
    'id' => 11,
    'name' => '三太夫',
    'age' => 79,
    'rank' => 'A',
  ),
) 
スポンサーリンク
スポンサーリンク