我正试图得到 player
最高的 rating
从以下JSON对象中提取。我有两个团队 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次尝试。
我试着让... max
从 home
和 away
团队,然后比较这两个值,得到最高值,不知为什么它没有返回每个团队的最大值。例如对于团队 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";
}
有什么想法吗?
谅谅
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;
}
}
);
// 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