LoginSignup
36
35

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-06-15

$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
        )

)
36
35
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
35