Php json数组排序

时间:2016-10-10 13:12:29

标签: php arrays json short

json url

我想对冠军阵列进行排序。我想按“排序” 冠军 - > 0 - >统计数据 - > totalSessionsPlayed“但我不能。我怎么能短阵?

$url = 'https://tr.api.pvp.net/api/lol/tr/v1.3/stats/by-summoner/3800684/ranked?season=SEASON2016&api_key=RGAPI-2F65B634-F9C5-4DA7-A5E3-1D955D5D1E3B';
$content = file_get_contents($url);
$arr = json_decode($content);
$sorted = sort(array_column($arr, 'totalSessionsPlayed')); 

ı发现这个代码但是没有用。

2 个答案:

答案 0 :(得分:1)

usort与自定义比较功能一起使用:

$champions = $arr->champions;
// usort alters the input array, no need to assign
usort($champions , function($a, $b) {
    // Will sort in descending order, for ascending, switch sides
    return $b->stats->totalSessionsPlayed - $a->stats->totalSessionsPlayed;
});

基本上,你必须对第一级冠军阵列进行排序,并在内部比较较低的值。

您的代码不起作用,因为totalSessionsPlayed数组中没有$arr个键。

答案 1 :(得分:0)

我希望这可以帮到你。

这里我使用第一个Object的嵌套foreach循环,然后是第二个Object的第二个循环。 使用array_filter有助于删除空字符串/元素。因为当存在空元素时它返回false。 SORT函数成功时返回TRUE,失败时返回FALSE。 这就是为什么我们使用最后一个循环来显示排序结果。

<?php 
$url = 'https://tr.api.pvp.net/api/lol/tr/v1.3/stats/by-summoner/3800684/ranked?season=SEASON2016&api_key=RGAPI-2F65B634-F9C5-4DA7-A5E3-1D955D5D1E3B';
$content = file_get_contents($url);
$arr = json_decode($content);
$champions = ($arr->champions); 
foreach($champions as $champion){
    $champion_totalSessionsPlayed = $champion;

    foreach($champion_totalSessionsPlayed as $champions_totalSessionsPlayed){
        $totalSessionsPlayed = $champions_totalSessionsPlayed->totalSessionsPlayed;
            $totalSessionsPlayed_array[] = $totalSessionsPlayed;
    }
}
$totalSessionsPlayed = array_filter($totalSessionsPlayed_array);
sort($totalSessionsPlayed);
$arrlength = count($totalSessionsPlayed);
for($x = 0; $x < $arrlength; $x++) {
    echo $totalSessionsPlayed[$x];
    echo "<br>";
}
?>