如何根据cakephp2中的时间显示数据?

时间:2017-12-25 01:58:21

标签: cakephp-2.0

目前,我使用下面的示例脚本来获取以下数组数据列表。并按以下顺序显示。

$ datas = $ this-> MyDataModel-> getDataByArrayLists($ listofids);

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [my_name] => Joe
                    [my_home] => home1
                    [my_school] => school1)
            [1] => Array
                (
                    [id] => 2
                    [my_name] => Bob
                    [my_home] => home2
                    [my_school] => school2

我想要做的是根据最后点击的时间更改要显示的数据的顺序。我不想在数据库中这样做。时间以以下格式保存在cookie数据中,并计划使用它来对数据进行排序。例如,(id 1是Joe)和(id 2是Bob),如果你看到上面的数组数据,则首先显示Joe,然后显示Bob。但是正如你在下面的数组中看到的那样,最后点击了id 2的[时间],Bob应该在数据的0索引中,Joe应该在第一个索引中。问题是我不知道如何改变索引数据的位置并显示它。

 Array
      (
        [1] => Array
        (
            [id] => 1
            [time] => 2017-12-22 18:53:47
        )
        ,
        [2] => Array
        (
            [id] => 2
            [time] => 2017-12-22 19:56:05
        )

)

一些示例或提示会很棒!我很乐意听到你的消息!

1 个答案:

答案 0 :(得分:1)

不是优化的解决方案,您可以使用

    $a = array(
        'data' => array(
            array(
                'id' => 1,
                'name' => 'Joe',
                'my_home' => 'Home 1'
            ),
            array(
                'id' => 2,
                'name' => 'Bob',
                'my_home' => 'Home 2'
            ),
            array(
                'id' => 3,
                'name' => 'Alice',
                'my_home' => 'Home 3'
            )
        )
    );

    $b = array(
        array(
            'id' => 1,
            'time' => '2017-12-22 18:53:47'
        ),
        array(
            'id' => 2,
            'time' => '2017-12-22 19:53:47'
        )
    );

    usort($a['data'], function($el1, $el2) use($b) {
        $t1 = Hash::get(Hash::extract($b, "{n}[id=" . $el1['id'] . "]"), '0.time', 0);
        $t2 = Hash::get(Hash::extract($b, "{n}[id=" . $el2['id'] . "]"), '0.time', 0);
        return (is_string($t1) ? strtotime($t1) : 0) < (is_string($t2) ? strtotime($t2) : 0) ;
    });