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

如何在PHP中按序号对JSON字符串中的名称进行排序?

按SerialNo字段排序数组的解决方案

嘿,我明白你想按SerialNo字段来排序你的数组对吧?之前用sort()不管用是因为它只能对简单的索引数组做排序,而且会重置键名,没法针对关联数组里的指定字段进行排序。咱们可以用usort()函数来解决这个问题,它允许你自定义排序规则。

完整的实现代码

$data = json_decode($result, true);
$v1 = $data['Data'];

// 自定义排序函数,按SerialNo升序排列
usort($v1, function($a, $b) {
    // 如果SerialNo是数字类型,直接比较差值即可
    return $a['SerialNo'] - $b['SerialNo'];
    // 如果SerialNo是字符串类型的数字,建议转成int后再比较,避免字符串排序的坑
    // return (int)$a['SerialNo'] - (int)$b['SerialNo'];
});

// 遍历输出排序后的结果
foreach($v1 as $key => $value) {
    $name = $value['Name'];
    $order = $value['SerialNo'];
    echo $name . '<br>';
    echo $order . '<br>';
}

关键部分解释

  • usort():这个函数会根据你提供的自定义比较函数对数组进行排序,排序后会重置数组的索引键名。
  • 匿名比较函数:函数接收两个参数$a和$b,分别代表数组中的两个元素。返回值规则是:
    • 返回负数:$a排在$b前面
    • 返回正数:$b排在$a前面
    • 返回0:两者位置不变
  • 关于SerialNo的类型:如果你的SerialNo是字符串形式的数字(比如"1"、"2"),直接用字符串比较可能会出现问题(比如"10"会被排在"2"前面),这时候记得把它们转成整数再比较(代码里注释的那行)。

如果想要降序排列,只需要把比较逻辑改成$b['SerialNo'] - $a['SerialNo']就可以啦。

内容的提问来源于stack exchange,提问作者AK Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:05:17