【问题标题】:Get the highest value from a JSON Object从 JSON 对象中获取最大值
【发布时间】:2020-09-28 07:50:44
【问题描述】:

我正在尝试从以下 JSON 对象中获取具有最高 ratingplayer。我有两个团队homeaway,我想比较所有玩家的所有评分并返回最高的rating 值和玩家的name

   {
        "lineup": {
            "home": {
                "starters": [{
                        "name": "Andreas",
                        "statistics": {
                            "rating": 6.38
                        }
                    },
                    {
                        "name": "Carlos",
                        "statistics": {
                            "rating": 6.87
                        }
                    }
                ]
            },
            "away": {
                "starters": [{
                        "name": "Felix",
                        "statistics": {
                            "rating": 7.20
                        }
                    },
                    {
                        "name": "Daniel",
                        "statistics": {
                            "rating": 4.87
                        }
                    }
                ]
            }
        }
    }

请记住,我的 JSON 包含 30 个 players 及其 ratings 而不是 4 个

到目前为止我已经尝试过。

尝试 #1:

我尝试从homeaway 团队中获取max,然后比较这两个值并获得最高值,但由于某种原因,它不会返回每个团队的最大值。 Ex for team home 返回 playerrating 6.38 而不是另一个。

//Home
$max = max($decode_one['lineup']['home']['starters']);
$finalVal = $max['statistics']['rating']; 

//Away
$max1 = max($decode_one['lineup']['away']['starters']);
$finalVal1 = $max1['statistics']['rating'];

尝试 #2:

在这里,我将里面的评级添加到一个新数组中,然后通过循环从数组中获取最大值。我遇到的两个问题首先是 JSON 包括 30 个玩家,15 个来自 home 和 15 个 away,出于某种原因,它只包含来自 home 的 15 个玩家,而不是来自两者。我认为这是因为每个团队的密钥都是相同的(0-14),而另一个问题我也想返回所选namename

$result = array();
foreach ($decode_one['lineup'] as $homeOrAway) {
    foreach ($homeOrAway as $startersOrSubs) {
        foreach ($startersOrSubs as $key => $value) {
            $result[$key['rating']][]  = $value['statistics']['rating'];            
        }
    }
}

foreach ($result as $key => $maxValue) {
    echo "{$key}: " . max($maxValue) . "\n";
}

有什么想法吗?

谢谢

【问题讨论】:

标签: javascript php arrays json max


【解决方案1】:

// A JS solution

getHighestRating = obj => {
    let starters = obj.lineup.home.starters.concat(obj.lineup.away.starters), highestRating = 0;
    for(const player of starters){
        highestRating = highestRating < player.statistics.rating ? player.statistics.rating : highestRating;
    }
    return highestRating;
}
getHighestRating(obj);

// Hope this will help

【讨论】:

    【解决方案2】:

    PHP 版本,使用array_reduce 查找来自“home”和“away”的玩家组合数组中的最大元素:

    $max = array_reduce(
      array_merge(
        $decode_one['lineup']['home']['starters'],
        $decode_one['lineup']['away']['starters']
      ),
      function($carry, $item) {
        if( $carry === NULL) {
          return $item;
        }
        else {
          return $carry['statistics']['rating'] > $item['statistics']['rating'] ?
            $carry : $item;
        }
      }
    );
    

    【讨论】:

    • 感谢 PHP 解决方案,它可以按我的意愿工作。我遇到了一个小问题,有时有些玩家没有评分值,它会返回错误Undefined index: rating。我试过检查是否有['statistics']['rating'] 没有成功。
    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多