-2

我将尝试按日期和时间对 json 格式文件进行排序

我试试这个方法。

    function sortFunction( $a, $b ) {
        return strtotime($a["date"]) - strtotime($b["date"]);
    }

 $inp = file_get_contents('del.json');
$tempArray = json_decode($inp);
usort($tempArray, "sortFunction");
var_dump($tempArray);

删除.json

[{"date":"2013-09-01 00:00:02","content":"1"},{"date":"2013-09-01 00:00:09","content":"5"},{"date":"2013-09-01 00:00:01","content":"3"}]

并且会收到此错误 Cannot use object of type stdClass as array 在此先感谢!

感谢您的所有评论,我使用此方法及其工作,对不起,我是新手,别呵呵!

   function my_sort($a, $b)
    {
        if ($a->date < $b->date) {
            return -1;
        } else if ($a->date > $b->date) {
            return 1;
        } else {
            return 0; 
        }
    }

    usort($users, 'my_sort');
4

2 回答 2

0

问题是您不了解排序回调。

它的返回值增加或减少实际元素的索引(+1 或 -1)。

http://php.net/usort

如果认为第一个参数分别小于、等于或大于第二个参数,则比较函数必须返回小于、等于或大于零的整数。

第二件事是,您的 json 数组使用默认排序的数字数组进行解码

$tempArray[0] = ...
$tempArray[1] = ...
$tempArray[2] = ...

对于排序回调来说重要的是 KEY,而不是数组的值。

使其工作的步骤:

  1. 将 JSON 数组解码为 PHP 数组

  2. 把 Date,转换为 DateTime 对象放入 key

    // Pseudo code:

    $tempArray[DateTime Object] = Array(values);

  3. 使用带有回调的 usort 比较 Date ( >, <) 而不是一个一个相减(这是您遇到的语义/逻辑错误)。

但是,将日期转换为 unix 时间戳并简单地在数组上使用会更容易。natsort()

于 2013-09-09T08:45:41.067 回答
0

将有两个变化:

function sortFunction( $a, $b ) {
    return strtotime($a->date) > strtotime($b->date) ? 1 : -1;
}

或者

$tempArray = json_decode($inp, TRUE);
于 2013-09-09T10:07:34.323 回答