目前,我使用下面的示例脚本来获取以下数组数据列表。并按以下顺序显示。
$ 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
)
)
一些示例或提示会很棒!我很乐意听到你的消息!
答案 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) ;
});