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
相关产品推荐
相关产品推荐

