PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPで日付の配列を並べ替える方法(usortとstrtotimeを使った実装例)

PHPで日付が格納された配列を並べ替えるには、usort() 関数と strtotime() 関数を組み合わせるのが便利です。strtotime() は日付文字列をUnixタイムスタンプに変換するため、数値として比較することで正確な日付順のソートが可能になります。

例1:日付を古い順(昇順)に並べ替える

まず、比較用のコールバック関数を定義し、usort() に渡す基本的な例を見てみましょう。

<?php
   function compareDates($date1, $date2){
      return strtotime($date1) - strtotime($date2);
   }
   $dateArr = array("2019-11-11", "2019-10-10","2019-08-10", "2019-09-08");
   usort($dateArr, "compareDates");
   print_r($dateArr);
?>

出力結果

上記のコードを実行すると、次のような出力が得られます。

Array
(
   [0] => 2019-08-10
   [1] => 2019-09-08
   [2] => 2019-10-10
   [3] => 2019-11-11
)

このように、配列内の日付が古いものから新しいものへと昇順に並べ替えられます。コールバック関数が負の値を返した場合は第1引数が先、正の値を返した場合は第2引数が先に配置されるため、タイムスタンプの差分をそのまま返すだけで昇順ソートが実現できます。

例2:日付を新しい順(降順)に並べ替える

続いて、比較条件を逆にして降順ソートを行う例です。重複する日付が含まれる場合の動作も確認できます。

<?php
   function compareDates($date1, $date2){
      if (strtotime($date1) < strtotime($date2))
         return 1;
      else if (strtotime($date1) > strtotime($date2))
         return -1;
      else
         return 0;
   }
   $dateArr = array("2019-11-11", "2019-10-10","2019-11-11", "2019-09-08","2019-05-11", "2019-01-01");
   usort($dateArr, "compareDates");
   print_r($dateArr);
?>

出力結果

上記のコードを実行すると、次のような出力が得られます。

Array
(
   [0] => 2019-11-11
   [1] => 2019-11-11
   [2] => 2019-10-10
   [3] => 2019-09-08
   [4] => 2019-05-11
   [5] => 2019-01-01
)

この例では、第1引数の日付が第2引数より古い場合に 1 を返し、新しい場合に -1 を返しています。これにより、配列は新しい日付から古い日付へと降順に並べ替えられます。同じ日付が複数存在する場合も、問題なく隣接して配置されることがわかります。

補足:PHP 7以降では宇宙船演算子が使える

PHP 7以降では、三項演算子やif文の代わりに宇宙船演算子(<=>)を使うことで、比較処理をより簡潔に書くことができます。

usort($dateArr, fn($a, $b) => strtotime($b) <=> strtotime($a)); // 降順

このように usort() を活用すれば、独自のルールで柔軟に配列をソートできるため、日付以外の複雑なデータ構造の並べ替えにも応用できます。

  1. PHPのsort()関数とは?配列を昇順にソートする方法をわかりやすく解説

    PHPのsort()関数は、配列の要素を昇順(小さい値から大きい値へ)に並べ替えるための組み込み関数です。基本構文sort(arr, flag)パラメータarr − ソート対象となる配列を指定します。flag − ソートの動作を指定するオプションのフラグです。省略可能です。0 = SORT_REGULAR − デフォルト値。要素を通常の方法で比較し、型の変更は行いません。1 = SORT_NUMERIC − 要素を数値として比較します。2 = SORT_STRING − 要素を文字列として比較します。3 = SORT_LOCALE_STRING − 現在のロケールに基づいて、要素を文字列として

  2. PHPのarray()関数とは?配列の作成方法をわかりやすく解説

    PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に