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

Laravel中如何按distance排序JSON对象内的数组

按distance字段对InnerData数组排序

看起来你在尝试用usort对返回的JSON数据里的InnerData数组按distance排序时遇到了问题,我来帮你搞定这个事儿。

首先,先把你拿到的原始响应数据贴出来方便参考:

{ 
  "Message": "Done.", 
  "Status": true, 
  "InnerData": [ 
    { "id": 66, "name": "tito", "distance": 74 }, 
    { "id": 67, "name": "liver pool", "distance": 83 }, 
    { "id": 67, "name": "Text", "distance": 72 } 
  ] 
}

接下来分两种情况给你解决方案,取决于你把JSON解码成关联数组还是对象:

情况1:解码为关联数组(推荐)

当你用json_decode($jsonString, true)解码时,数据会变成关联数组,这时候usort的回调函数要通过数组键名访问distance:

// 假设$jsonString是你拿到的JSON字符串
$response = json_decode($jsonString, true);
$innerData = $response['InnerData'];

// 按distance升序排序(从小到大)
usort($innerData, function($a, $b) {
    return $a['distance'] - $b['distance'];
});

// 如果需要降序(从大到小),把返回值反过来就行
// usort($innerData, function($a, $b) {
//     return $b['distance'] - $a['distance'];
// });

// 把排序后的数组放回原响应结构里
$response['InnerData'] = $innerData;

// 输出排序后的JSON(可选)
echo json_encode($response, JSON_PRETTY_PRINT);

情况2:解码为对象

如果解码时没加第二个参数true,数据会变成对象,这时候要通过对象属性访问distance:

$response = json_decode($jsonString);
$innerData = $response->InnerData;

// 升序排序
usort($innerData, function($a, $b) {
    return $a->distance - $b->distance;
});

$response->InnerData = $innerData;
echo json_encode($response, JSON_PRETTY_PRINT);

你之前用usort没成功,大概率是回调函数里访问distance的方式错了——比如数组用了对象的访问方式,或者反过来。按照上面的写法调整后,应该就能正常排序了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:31