从JSON对象中获取最高值

问题描述 投票:1回答:2

我正试图得到 player 最高的 rating 从以下JSON对象中提取。我有两个团队 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次尝试。

我试着让... maxhomeaway 团队,然后比较这两个值,得到最高值,不知为什么它没有返回每个团队的最大值。例如对于团队 home 返回 player 随着 rating 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。

在这里,我将评分添加到一个新的数组中 然后用一个循环从数组中得到最大的值。我遇到的2个问题是,首先JSON包含了30个球员,其中15个来自于 "我"。home 和15 away 出于某种原因,它只把15名球员从。home 而不是从两个。我想这是因为每支队伍的钥匙都是一样的(0-14),而另一个问题是我也想返回到 name 选定的 player.

$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
2个回答
2
投票

PHP版本,使用 array_reduce 在 "主场 "和 "客场 "球员的组合数组中寻找最大元素。

$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;
    }
  }
);

0
投票

// 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
© www.soinside.com 2019 - 2024. All rights reserved.