【问题标题】:Finding highest value of 3 keys in array with more keys在具有更多键的数组中查找 3 个键的最大值
【发布时间】:2019-01-20 15:43:54
【问题描述】:

我有一个如下所示的数组:

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

我该如何解决这个问题?

【问题讨论】:

    标签: php arrays search key max


    【解决方案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

    【讨论】:

      【解决方案2】:

      为什么会得到这个结果:

      array_search — 在数组中搜索给定的值,如果成功则返回第一个对应的键。

      在您的代码中,

      max($arr[$x]['home_win_pred'], $arr[$x]['draw_pred'], $arr[$x]['away_win_pred'])
      

      返回 50,第一次出现的 50 位于键 team_home_id

      【讨论】:

        【解决方案3】:

        这是一个选项,它通过将数组正式子集为仅感兴趣的键来解决问题。然后,它使用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
        )
        

        请注意,这将返回三个感兴趣的键中的多个键,如果最高值出现平局。

        【讨论】:

          猜你喜欢
          • 2013-01-23
          • 1970-01-01
          • 2018-10-05
          • 1970-01-01
          • 2020-11-22
          • 2016-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多