LoginSignup
1
0

More than 5 years have passed since last update.

【サルが書く】phpで2次元配列をソートしようと思います

Last updated at Posted at 2018-12-05

phpで2次元配列をソートします

わきゃあ

様々な要素を持った配列を日付順や複合的にソートしたいときに役立つ(多分)

array_multisortを使用することで、簡単にソートすることができます。

bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )

単一条件でソート

適当な配列データを用意しました。
"date"を時間が最新日付順に並び替えてみます。


<?php

//サンプルデータ
$sampleArr = array(
    0 => array(
        "date" => '2008-01-04',
        "name" => 'john',
        "age" => 10
    ),
    1 => array(
        "date" => '2008-10-21',
        "name" => 'suzuki',
        "age" => 2
    ),
    2 => array(
        "date" => '2007-07-03',
        "name" => 'sato',
        "age" => 98
    ),
    3 => array(
        "date" => '2017-07-03',
        "name" => 'mochita',
        "age" => 34
    )
);

// 日付のみでソートする場合
foreach ($sampleArr as $key => $row) {
    $date[$key] = $row["date"];
}

// 日付が早い順に並び替える
array_multisort($date, SORT_ASC, $sampleArr);

?>

配列のkeyと並び替えをしたい要素のみの配列を用意し、その配列を使用してソートを行います。

並び替え用の配列$dateの中身
Array
(
    [0] => 2008-01-04
    [1] => 2008-10-21
    [2] => 2007-07-03
    [3] => 2017-07-03
)

複数条件のソート

これを応用した形で、複数条件でソートすることができます。


<?php

$sampleArr = array(
    0 => array(
        "date" => '2008-01-04',
        "name" => 'john',
        "age" => 10
    ),
    1 => array(
        "date" => '2008-10-21',
        "name" => 'suzuki',
        "age" => 2
    ),
    2 => array(
        "date" => '2007-07-03',
        "name" => 'sato',
        "age" => 98
    ),
    3 => array(
        "date" => '2017-07-03',
        "name" => 'mochita',
        "age" => 34
    )
);

// 名前でソートし、年齢でソートし、日付でソートする
foreach ($sampleArr as $key => $row) {
    $name[$key] = $row["name"];
    $age[$key] = $row["age"];
    $date[$key] = $row["date"];
}

array_multisort($name, SORT_DESC, $age, SORT_DESC, $date, SORT_DESC, $sampleArr);

?>
中身
Array
(
    [0] => Array
        (
            [date] => 2008-10-21
            [name] => suzuki
            [age] => 2
        )

    [1] => Array
        (
            [date] => 2007-07-03
            [name] => sato
            [age] => 98
        )

    [2] => Array
        (
            [date] => 2017-07-03
            [name] => mochita
            [age] => 34
        )

    [3] => Array
        (
            [date] => 2008-01-04
            [name] => john
            [age] => 10
        )

)
1
0
0

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
1
0