【问题标题】:Php json array sortphp json数组排序
【发布时间】:2016-10-10 13:12:28
【问题描述】:

json url

我想对冠军数组进行排序。我想按“ Champions -> 0 -> stats -> 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')); 

我找到了这段代码,但它不起作用。

【问题讨论】:

  • 请在您的问题正文中包含相关的 JSON。
  • 不过,请不要全部。
  • 请仅相关 JSON。
  • @kyhn1239。您需要从 totalSessionsPlayed 单独获取数组中的数据。我是否很好地理解了这个问题。或者以其他方式输出

标签: php arrays json short


【解决方案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;
});

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

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

【讨论】:

    【解决方案2】:

    希望对你有帮助。

    这里我对第一个 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>";
    }
    ?>
    

    【讨论】:

    • 因为您的答案缺乏解释。强烈建议不要仅使用代码回答。
    • 当然我会,但是这段代码需要什么样的解释?它只是一个简单的 foreach 循环,然后提取值,然后对值进行排序?
    • 解释你为什么使用嵌套的 for 循环。解释array_filter 做了什么。解释你为什么打电话给sort。解释最后一个 for 循环的作用。当然,经验丰富的开发人员可以看到它的作用,但这不是重点。 See this meta discussion
    • @ Pieter van den Ham:答案已编辑。现在可以了吗?
    • 想象你正在和一个初学者交谈。清楚地解释他们需要做什么。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    相关资源
    最近更新 更多