PHPで日付順に配列を並び替える方法


  1. usort関数を使用する方法:

    function sortByDate($a, $b) {
       return strtotime($a['date']) - strtotime($b['date']);
    }
    
    $array = [
       ['date' => '2022-01-15', 'title' => '記事1'],
       ['date' => '2023-03-10', 'title' => '記事2'],
       ['date' => '2021-11-30', 'title' => '記事3'],
    ];
    
    usort($array, 'sortByDate');
    
    foreach ($array as $item) {
       echo $item['title'] . "\n";
    }

    上記の例では、$array配列の各要素には、日付とタイトルのキーが含まれています。sortByDate関数は、strtotime関数を使用して日付をUNIXタイムスタンプに変換し、その差を比較して並び替えを行います。

  2. array_multisort関数を使用する方法:

    $array = [
       ['date' => '2022-01-15', 'title' => '記事1'],
       ['date' => '2023-03-10', 'title' => '記事2'],
       ['date' => '2021-11-30', 'title' => '記事3'],
    ];
    
    foreach ($array as $key => $row) {
       $dates[$key] = $row['date'];
    }
    
    array_multisort($dates, SORT_ASC, $array);
    
    foreach ($array as $item) {
       echo $item['title'] . "\n";
    }

    上記の例では、array_multisort関数を使用して$array配列を$dates配列の値に基づいて昇順に並び替えます。$dates配列には日付のみを格納し、array_multisort関数がそれを使用して並び替えを行います。

  3. array_walk関数を使用する方法:

    function sortByDate(&$value, $key) {
       $value['date'] = strtotime($value['date']);
    }
    
    $array = [
       ['date' => '2022-01-15', 'title' => '記事1'],
       ['date' => '2023-03-10', 'title' => '記事2'],
       ['date' => '2021-11-30', 'title' => '記事3'],
    ];
    
    array_walk($array, 'sortByDate');
    array_multisort(array_column($array, 'date'), SORT_ASC, $array);
    
    foreach ($array as $item) {
       echo $item['title'] . "\n";
    }

    上記の例では、array_walk関数を使用して$array配列の各要素の日付をUNIXタイムスタンプに変換します。その後、array_multisort関数を使用して日付に基づいて並び替えを行います。

これらの方法を使用すると、PHPで配列を日付順に並び替えることができます。適切な方法を選択し、自分のニーズに合わせてコードを調整してください。