我有一些使用usort按“站点”排序的JSON数据
usort($data,function($a,$b) {
return strnatcasecmp($a['site'],$b['site']);
});
结果如下
Array (
[0] => Array
(
[time] => 2017-07-15 15:43:45
[user] => ast125
[site] => facebook
)
[1] => Array
(
[time] => 2017-07-12 04:59:11
[user] => ast111
[site] => facebook
)
[2] => Array
(
[time] => 2017-07-19 12:45:14
[user] => ast133
[site] => facebook
)
[3] => Array
(
[time] => 2017-07-19 12:45:14
[user] => ast133
[site] => google
)
[4] => Array
(
[time] => 2017-07-19 12:45:14
[user] => ast125
[site] => facebook
)
.... and so on
我被困住了,因为现在我不确定如何对每个站点的用户进行排序。 现在,订单是
facebook-ast125
facebook-ast111
facebook-ast133
google-ast133
google-ast125
但是我希望对用户在其网站用户组中进行排序
facebook-ast111
facebook-ast125
facebook-ast133
google-ast125
google-ast133
现在,我正在考虑将JSON数组分成多个数组(按站点),然后按用户对新站点数组进行排序,然后将它们合并为一个...
我是否可以使用usort或其他PHP函数来更简单地实现此目的?
答案 0 :(得分:1)
我是否可以使用usort或其他PHP函数来更简单地实现此目的?
当然。
usort($data, function(array $a, array $b) : int {
return strcasecmp($a['site'], $b['site']) ?: strcasecmp($a['user'], $b['user']);
});
当{{1}中$a
和$b
不同时,第一个'site'
将返回非零值,因此将使用该值。当它们相同时,第一个strcasecmp()
将返回0,将其视为false,因此strcasecmp()
运算符将使用第二个比较的结果。
此模式可以链接到任意数量的比较。