フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

静止画ベースの見守りサービス「MONITOR」とセンサハンドラの「PondSlider」を作りました

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
        )

)

コメント

記事に戻る

コメントを残す