6

次のようなタイムスタンプの配列があります。

2012-11-19 19:45

日付で並べ替える必要があります。日付のUNIXタイムスタンプを取得できれば、バブルソートなどを実行できますが、どの関数がそれを提供するのかわかりません。strtotimeを見ましたが、日付形式を渡すことができません。また、バブルソートが最善の方法かどうかもわかりません。

助言がありますか?

配列の例:

また、申し訳ありませんが、「show_date」にあると言っておく必要があります。

Array
(
    [15] => Array
        (
            [show_date] => 2012-11-19 10:40
        )

    [16] => Array
        (
            [show_date] => 2012-11-20 10:40
        )

    [17] => Array
        (
            [show_date] => 2012-11-21 10:40
        )

    [18] => Array
        (
            [show_date] => 2012-11-22 10:40
        )

)
4

4 に答える 4

4

これを過度に複雑にする必要はありません。組み込みsort関数を使用するだけです。

sort($timestamp_array);

文字列は標準の「ISOソート可能日付」形式であるため、UNIXタイムスタンプに変換する必要はありません。つまり、文字列を並べ替えると、日付は正しい順序になります。

これがどのように機能するかを示すphp -aセッションです:

php > $ts = array('1986-01-31 12:11', '2012-01-01 13:12', '1980-10-10 12:00');
php > sort($ts);
php > echo var_export($ts);
array (
  0 => '1980-10-10 12:00',
  1 => '1986-01-31 12:11',
  2 => '2012-01-01 13:12',
)
于 2012-11-20T09:19:02.030 に答える
1

PHP標準の並べ替えで並べ替えることができます。配列の並べ替えを参照してください

asort($timestamps);

あなたの例では、比較関数を定義することができます

function cmp_show_date($a, $b)
{
    if ($a['show_date'] == $b['show_date']) {
        return 0;
    }

    return ($a['show_date'] < $b['show_date']) ? -1 : 1;
}

そしてそれをusortで使用します

usort($timestamps, 'cmp_show_date');
于 2012-11-20T09:19:55.850 に答える
0

その特定の日付を渡すために日付形式は必要ありません。合格strtotime('2012-11-19 19:45');すると、UNIXタイムスタンプが返されます。

編集:

$arr = array();
foreach ($dates as $k => $v) {
    $arr[$k]  = strtotime($v['date']);//or $k if your date is the index
}

array_multisort($arr, SORT_ASC, $dates);
于 2012-11-20T09:18:54.953 に答える
0

usort()とstrtotimeを組み合わせて使用​​することもできますが、タイムゾーンといくつかの形式を処理できるため、 DateTimeクラスとそのgetTimestampメソッドを使用したいと思います。

于 2012-11-20T09:20:51.947 に答える