You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP对cURL响应数组按total_views字段数值排序的实现方法

代码错误原因

你的usort逻辑有3个核心问题,导致排序失效:

  • 排序目标错误:需要排序的是接口返回的记录集合$data['data'],不是最外层的$data数组。直接对顶层$data排序会破坏原有数组结构,后续遍历$data['data']自然无法拿到正确结果。
  • 比较函数取值错误:usort回调中的$a、$b本身就是单条记录(包含total_views、total_visits字段的一维数组),不需要额外取$a[0]、调用array_column,这部分写法完全不符合实际数组结构。
  • 排序字段错误:需求是按total_views排序,你写的逻辑是取total_visits字段,即使排序生效也不符合预期。
正确实现代码
$data = json_decode($result, true);

// 排序位置:json解析完成后、遍历数据前,直接对记录集合$data['data']排序
// 以下是按total_views 从大到小降序的写法,需要升序就把回调里$a和$b的位置互换
usort($data['data'], function($a, $b) {
    // PHP7+ 可以用太空船操作符<=>直接比较整数,返回值逻辑稳定不会出错
    return $b['total_views'] <=> $a['total_views'];
});

// 遍历输出最多25条结果
$counter = 0;
foreach ($data['data'] as $item) {
    if ($counter++ >= 25) {
        break;
    }
    echo $item['total_views'] . " " . $item['total_visits'] . PHP_EOL;
}
补充说明
  • usort是PHP内置的数组排序函数,专门用于这类自定义字段排序场景,是当前需求的最优实现,不需要额外手写排序算法。
  • 如果使用已经停止维护的PHP5版本,把usort回调里的返回值替换为return $b['total_views'] - $a['total_views'];即可实现相同的降序效果。
  • 如果需要对数据做过滤、字段校验,逻辑放在usort调用之前即可,减少排序时的无效计算量。

内容的提问来源于stack exchange,提问作者Joey Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:45:55