web-dev-qa-db-ja.com

PHP日付順の配列?

可能性のある複製:
日付を含む要素で多次元配列をソートする

次のようなPHP配列のXMLまたはJSONからのデータがあります。

[0]= array(2) {
    ["title"]= string(38) "Another title"
    ["date"]= string(31) "Fri, 17 Jun 2011 08:55:57 +0200"
}
[1]= array(2) {
    ["title"]= string(38) "My title"
    ["date"]= string(31) "Mon, 16 Jun 2010 06:55:57 +0200"
}

私がしたいのは、日付で2つのアイテムを並べることです。

  1. ソート値がすべてのアイテム内にある場合、日付でソートできますか?
  2. 日付形式をタイムスタンプに変換する必要がありますか?

やりたくないこと

日付を使用してIDとして設定することもできますが、2つのアイテムが同じ日付を持つことができ、一意ではないため、正しくありません。

32
Jens Törnell

日付を並べ替える前にタイムスタンプに変換する必要はありませんが、日付なしで並べ替えるのに時間がかかるため、これは良い考えです。

$data = array(
    array(
        "title" => "Another title",
        "date"  => "Fri, 17 Jun 2011 08:55:57 +0200"
    ),
    array(
        "title" => "My title",
        "date"  => "Mon, 16 Jun 2010 06:55:57 +0200"
    )
);

function sortFunction( $a, $b ) {
    return strtotime($a["date"]) - strtotime($b["date"]);
}
usort($data, "sortFunction");
var_dump($data);
78
KARASZI István

sort を使用します。

usort($array, function($a1, $a2) {
   $v1 = strtotime($a1['date']);
   $v2 = strtotime($a2['date']);
   return $v1 - $v2; // $v2 - $v1 to reverse direction
});
33
phihag

並べ替えに必要な文字列を簡単に比較できないため、文字列ではなくDateTimeオブジェクトを使用することをお勧めします。また、日付を操作することで追加の利点が得られます。

DateTimeオブジェクトを取得したら、並べ替えは非常に簡単です。

usort($array, function($a, $b) {
  return ($a['date'] < $b['date']) ? -1 : 1;
});
18
Ondřej Mirtes