2

テンプレート フィールド ($fields[3]) の 1 つでリストを並べ替えようとしていますが、これは日付が含まれるテキスト入力フィールドです。問題は、日付の形式が原因で、数字を比較しているだけだと思う​​ため、正しくソートされないことです。

並べ替えが発生する前に日付形式を変更する必要があると思いますが、これまでのところ失敗しています。

私はそのように usort 関数を使用しようとしています (フィールド 3 は、この dd/mm/yyyy のようにフォーマットされた日付を持つものです)、

if (!function_exists('do_sort')) {
    function do_sort($a, $b) {
        return $a->fields[3] > $b->fields[3];
    }}

$data = $params['data'];
usort($data, 'do_sort');
$smarty->assign('sorted', $data);

これはデータを並べ替えますが、以前と同じように、何も変更していないため、正しい順序ではありません。並べ替える前に日付を再フォーマットするのを手伝ってくれる人はいますか?

どうもありがとう

クリス

4

2 に答える 2

4

なんとかやった。他の誰かが興味を持っているなら、私は次の関数を使用しました:

   function date_compare($a, $b)
    {
        $t1 = strtotime($a->fields[3]);
        $t2 = strtotime($b->fields[3]);
        return $t1 - $t2;
    }    
    $data = $params['data'];
    usort($data, 'date_compare');
    $smarty->assign('sorted', $data);
于 2012-07-20T17:10:19.093 に答える
0

最初に文字列をタイムスタンプに変換してみてください。

function do_sort($a, $b) {
    $aval = strtotime($a);
    $bval = strtotime($b);
    if ($aval == $bval) {
        return 0;
    }
    return $aval < $bval ? -1 : 1;
}
于 2012-07-20T17:01:16.750 に答える