PHPで配列内の日付をソートする方法(usort関数の使い方を解説)
PHPで配列として渡された複数の日付を並べ替えたい場合は、usort()関数とユーザー定義の比較関数を組み合わせることで簡単に実現できます。ここでは、具体的なサンプルコードと実行結果をもとに、そのやり方をわかりやすく解説します。
サンプルコード
<?php
function compare_dates($time_1, $time_2)
{
if (strtotime($time_1) > strtotime($time_2))
return -1;
else if (strtotime($time_1) < strtotime($time_2))
return 1;
else
return 0;
}
$my_arr = array("2020-09-23", "2090-12-06", "2002-09-11", "2009-30-11");
usort($my_arr, "compare_dates");
print_r("ソート後の日付一覧:");
print_r($my_arr);
?>実行結果
ソート後の日付一覧:Array ( [0] => 2090-12-06 [1] => 2020-09-23 [2] => 2002-09-11 [3] => 2009-30-11 )
コードの解説
まず、compare_datesという名前の比較関数を定義しています。この関数は2つの日付文字列を引数として受け取り、strtotime()関数でUNIXタイムスタンプに変換した上で相互に比較します。
- 最初の日付の方が新しい(大きい)場合 → -1 を返す
- 最初の日付の方が古い(小さい)場合 → 1 を返す
- 両方が等しい場合 → 0 を返す
この戻り値の設計により、日付は新しい順(降順)に並べ替えられます。逆に昇順(古い順)でソートしたい場合は、戻り値の「-1」と「1」を入れ替えるだけで対応できます。
続いて、複数の日付を格納した配列$my_arrを用意し、usort()関数にこの配列と比較関数を渡してソートを実行します。最後にprint_r()で結果を出力すると、ソート済みの日付が確認できます。
注意点:無効な日付の扱い
サンプル内の「2009-30-11」は月の値が30となっており、実際には存在しない日付です。このような不正な日付文字列に対してstrtotime()はfalseを返すため、有効なタイムスタンプよりも小さい値として扱われ、降順ソートでは配列の末尾に配置されます。実務ではcheckdate()関数などで日付の妥当性を事前にチェックすることで、意図しない並び順を防ぐことができます。
-
【Python】偶数・奇数ごとに配列を並べ替えるパリティソートの実装方法
整数がいくつか格納された配列 A があるとしましょう。この配列を、偶数が先頭側、奇数が後ろ側に来るように並べ替えることを考えます。たとえば、配列が A = [1, 5, 6, 8, 7, 2, 3] であれば、実行結果は [6, 8, 2, 1, 5, 7, 3] のようになります。 アルゴリズムの考え方 この問題は、2つのインデックス(ポインタ)を使った「その場での入れ替え(インプレーススワップ)」によって効率的に解くことができます。手順は次のとおりです。 i = 0、j = 0 で初期化します。 j が配列の長さより小さい間、以下を繰り返します。 arr[j] が偶数であれば、arr[
-
Pythonで配列が単調(モノトニック)かどうかを判定する方法
この記事では、与えられた配列が「単調(モノトニック)」であるかどうかを判定するための考え方と実装方法について解説します。 問題の定義 n個の整数を含む配列 Arr が入力として与えられます。このとき、その配列が単調な性質を持っているかどうかを判定する必要があります。 配列が単調であるとは、要素が最初から最後まで連続して増加しているか、または連続して減少している状態を指します。つまり、増加と減少が混在していない配列が単調な配列です。 数学的な定義 配列 A が単調増加であるのは、すべての i <= j に対して次の条件が成り立つ場合です。 A[i] <= A[j] 同様に、配列 A