在具有更多键的数组中找到3个键的最大值

时间:2019-01-20 15:43:55

标签: php arrays search key max

我有一个看起来像这样的数组:

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_preddraw_predaway_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

我该如何解决?

3 个答案:

答案 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上。