Edited at

2次元配列の2次元目の配列の値でソートをする

More than 3 years have passed since last update.


$array = array(
array(
'id' => 10,
'name' => 'hoge',
),
array(
'id' => 3,
'name' => 'fuga',
),
array(
'id' => 20,
'name' => 'foo',
),
array(
'id' => 1,
'name' => 'bar',
),
);

というような2次元配列があり、2次元目のキー'id'の値でソートをしたいときがちょくちょくある。

そこで、以下の様な関数を作ってみた。

function sortArrayByKey( &$array, $sortKey, $sortType = SORT_ASC ) {

$tmpArray = array();
foreach ( $array as $key => $row ) {
$tmpArray[$key] = $row[$sortKey];
}
array_multisort( $tmpArray, $sortType, $array );
unset( $tmpArray );
}

で、以下のように使うと、とてもいい感じになった。

$array = array(

array(
'id' => 10,
'name' => 'hoge',
),
array(
'id' => 3,
'name' => 'fuga',
),
array(
'id' => 20,
'name' => 'foo',
),
array(
'id' => 1,
'name' => 'bar',
),
);

// そのまま出力
print_r( $array );

// ソート実行
sortArrayByKey( $array, 'id' );

// もう一度出力
print_r( $array );

Array

(
[0] => Array
(
[id] => 10
[name] => hoge
)

[1] => Array
(
[id] => 3
[name] => fuga
)

[2] => Array
(
[id] => 20
[name] => foo
)

[3] => Array
(
[id] => 1
[name] => bar
)

)
Array
(
[0] => Array
(
[id] => 1
[name] => bar
)

[1] => Array
(
[id] => 3
[name] => fuga
)

[2] => Array
(
[id] => 10
[name] => hoge
)

[3] => Array
(
[id] => 20
[name] => foo
)

)