使用另一个嵌套数组中的值对json嵌套数组进行排序

时间:2019-08-21 22:18:48

标签: php arrays json sorting multidimensional-array

我正在使用php脚本获取json数据,并且输出看起来像这样-

api":{
  "status":200
  "message":"GET ...."
  "results":15
  "filters":[...]
  "standings":[
     0:{
        "league":"standard"
        "teamId":"1"
        "seasonYear":"2018"
        "conference":{4 items
               "name":"east"
               "rank":"12"
               "win":"16"
               "loss":"36"
}
        "division":{
               "name":"southeast"
               "rank":"5"
               "win":"6"
               "loss":"10"
}
       "winPercentage":".354"
       "lossPercentage":".646"
}
1:{...} ...

我正在尝试使用standings->conference->rank键/值中的值对“积分”数组进行排序。

这就是我尝试过的-

..
$response = 'api url';
$items = json_decode($response->body->api->standings);
foreach ($items as $item) {
usort($item,function($a, $b) {
    return $a->conference->rank < $b->conference->rank ? -1 : 1;
  });

echo $item->conference->rank;
}

但是它不输出任何东西。如果没有json_decode,它将输出原始顺序。我想念什么?

2 个答案:

答案 0 :(得分:0)

您需要将json字符串传递给json_decode。我假设$response->body是您的字符串,所以您这样做:

$result = json_decode($response->body);

接下来,您不需要迭代数组,usort函数将为您完成此操作。

usort($result->api->standings, function($a, $b) {
    return $a->conference->rank - $b->conference->rank;
});

输出示例:https://3v4l.org/JDt2S

答案 1 :(得分:0)

如果您使用的是php 7+,则可以使用spaceship(<=>)运算符

$items = json_decode($response->body->api->standings);
usort($item,function($a, $b) {
    return $a->conference->rank <=> $b->conference->rank;
});

Demo

PHP 5.6或更低版本

$items = ($arr->api->standings);
usort($items,function($a, $b) {
    if($a->conference->rank == $b->conference->rank){
        return 0;
    }
    return ($a->conference->rank < $b->conference->rank) ? -1 : 1;
});
print_r($items);

Demo

相关问题