【发布时间】:2020-09-28 07:50:44
【问题描述】:
我正在尝试从以下 JSON 对象中获取具有最高 rating 的 player。我有两个团队home 和away,我想比较所有玩家的所有评分并返回最高的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:
我尝试从home 和away 团队中获取max,然后比较这两个值并获得最高值,但由于某种原因,它不会返回每个团队的最大值。 Ex for team 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:
在这里,我将里面的评级添加到一个新数组中,然后通过循环从数组中获取最大值。我遇到的两个问题首先是 JSON 包括 30 个玩家,15 个来自 home 和 15 个 away,出于某种原因,它只包含来自 home 的 15 个玩家,而不是来自两者。我认为这是因为每个团队的密钥都是相同的(0-14),而另一个问题我也想返回所选name 的name。
$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";
}
有什么想法吗?
谢谢
【问题讨论】:
-
直接在那些
starters数组上调用max没有意义 - 你没有简单的数值,你有对象。 -
这将使您的对象获得最高评价
Object.values(obj.lineup).flatMap(k=>k.starters).sort((a,b)=>b.statistics.rating-a.statistics.rating)[0]
标签: javascript php arrays json max