我有一个看起来像这样的数组:
Array
(
[id] => 12
[team_home_id] => 50
[team_away_id] => 63
[score_team_home] => 1
[score_team_away] => 1
[league_id] => 3
[home_win_pred] => 50
[draw_pred] => 26
[away_win_pred] => 24
)
现在ת我想从3个键(3个预测:home_win_pred
,draw_pred
,away_win_pred
)中查找哪一个是最高的,然后返回该键。
我以为我使用的代码可以工作,但是如果数组中其他地方存在重复值,它似乎会返回不同的键。因此,在上面的示例中,它返回team_home_id
,因为这也是我的3中最高的50。
我使用的代码:
array_search(max($arr[$x]['home_win_pred'], $arr[$x]['draw_pred'], $arr[$x]['away_win_pred']), $arr[$x]);
对于上述示例数组,它返回team_home_id
而不是home_win_pred
我该如何解决?
答案 0 :(得分:1)
为什么不使用简单的for循环:
$arr = array("team_home_id" => 50, "home_win_pred" => 50, "draw_pred" => 26, "away_win_pred" => 24);
$fields = array('home_win_pred','draw_pred','away_win_pred'); //field you want to loop over
$k = array_shift($fields); //take the first field
$max = $arr[$k]; // set the first value as max
foreach($fields as $filed) {
if ($arr[$filed] > $max) { // if found a new max updated max an field
$max = $arr[$filed];
$k = $filed;
}
}
现在,$k
(如果最高字段为:home_win_pred
答案 1 :(得分:0)
这里是一个选项,它通过将数组正式子集化为仅关注的键来解决该问题。然后,它使用array_keys()
查找具有最大值的键。
$keys = array('home_win_pred', 'draw_pred', 'away_win_pred');
$subset = array_intersect_key($arr, array_flip($keys));
$maxs = array_keys($subset, max($subset));
print_r($maxs); // could be more than one key here
Array
(
[0] => home_win_pred
)
请注意,如果最高值并列,它将返回感兴趣的三个键中的多个键。
答案 2 :(得分:0)
为什么会得到此结果:
array_search —在数组中搜索给定值,如果成功,则返回第一个对应的键。
在您的代码中
max($arr[$x]['home_win_pred'], $arr[$x]['draw_pred'], $arr[$x]['away_win_pred'])
返回50,并且第一次出现50是在键team_home_id
上。