php - 如何使用 PHP 对具有多个条件的 JSON 进行排序?
问题描述
我有一些使用 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
我被卡住了,因为现在我不确定如何对每个站点的用户进行排序。现在,订单是
脸书 - ast125
脸书 - ast111
脸书 - ast133
谷歌 - ast133
谷歌 - ast125
但我希望用户在他们的网站组中进行排序
脸书 - ast111
脸书 - ast125
脸书 - ast133
谷歌 - ast125
谷歌 - ast133
现在,我正在考虑将 JSON 数组分解为多个数组(按站点),然后按用户对新站点数组进行排序,然后将它们合并回一个...
有没有更简单的方法可以使用 usort 或其他 PHP 函数来解决这个问题?
解决方案
有没有更简单的方法可以使用 usort 或其他 PHP 函数来解决这个问题?
当然。
usort($data, function(array $a, array $b) : int {
return strcasecmp($a['site'], $b['site']) ?: strcasecmp($a['user'], $b['user']);
});
(在线演示)
当$a
和$b
不同时'site'
,第一个strcasecmp()
将返回一个非零值,因此将使用该值。当它们相同时,第一个strcasecmp()
将返回 0,将其视为 false,因此?:
运算符将使用第二个比较的结果。
这种模式可以链接到任意数量的比较。
推荐阅读
- cookies - Auth0 - 注销时删除会话 cookie
- python - 多视图设置到路由器 Django 休息框架中
- jquery - 选择所有共享一个类但没有特定 id 的元素
- numpy - Numpy文档中提到的“sum product”是什么意思?
- apache-nifi - Apache NIFI 处理器不维护状态
- javascript - 从下拉菜单中单击后添加图像的模态
- excel - 如何获取当月第 24 天的下周日的日期?
- android - 在 recyclerview 项目上单击 show recyclerview data custom in toDialog Box
- javascript - Vue js 2 将数据发布到 JSON 对象
- c++ - ARCore NDK Pose 的 Matrix4x4 格式是什么?