【问题标题】:Get highest value from multidimensional array从多维数组中获取最大值
【发布时间】:2017-11-03 10:01:12
【问题描述】:

这是我的多维数组:

$arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];

我想从这个数组中获取最大值。

这是我迄今为止尝试过的:

$highest = 0;
function getHighest($arr) {
    for ($i = 0; $i < count($arr); $i++) {
        if (is_array($arr[$i])) {
            getHighest($arr[$i]);
        } else {
            if ($arr[$i] > $arr[$i + 1]) {
                $highest = $arr[$i];
            } else {
                $highest = $arr[$i + 1];
            }
        }
    }
    return $highest;
}
echo getHighest($arrOrg);

但它给出的结果不正确:78

你能帮帮我吗?

【问题讨论】:

  • 当前输出是多少?
  • 我得到 78。最后一个正在输出

标签: php multidimensional-array max array-algorithms


【解决方案1】:

可能是这样的:

$arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
$json   = json_encode($arrOrg);
$json   = str_replace(array('[', ']'), "", $json);
$arr    = explode(",", $json);

echo $maximum = max($arr);

在 Vahe Galstyan 评论后编辑

$arrOrg = array(
    2, 
    3,
    array(5, 7, 1), 
    100,
    array(
        6, 
        9, 
        array(14, 95)
    ), 
    78
);

$json = json_encode($arrOrg);
$json = str_replace(array('[', ']'), "", $json);
$arr  = explode(",", $json);

echo $maximum = max($arr);

【讨论】:

  • 如果数组是这样的呢? $arrOrg = [2, 3, array(5, 7, 1), 100, [6, 9, [14, 95]], 78];
  • 哦,好的))我误解了一些东西)
  • 别担心,伙计
  • 漂亮的解决方案!
  • @VaheGalstyan : 由于这些东西,PHP 真的很有趣
【解决方案2】:

您可以使用此功能。

  function getHighest($array) {
       foreach($array as $key => $value) {
           if (is_array($value)) {
               $array[$key] = getHighest($value);
           }
       }

       sort($array);

       return array_pop($array);
    }

    echo getHighest($arrOrg);

【讨论】:

    【解决方案3】:

    没有全局变量,修改数组或进行额外的转换:

    funcion getMax ($arr) {
        $max = null;
        foreach ($arr as $act) {
            if (is_array ($act)) {
                $act = getMax ($act);
            }
            if ($max == null || act > $max) {
                $max = $act;
            }
        }
        return $max;
    }
    

    【讨论】:

      【解决方案4】:

      你也可以通过 array_walk_recursive() 和 max() 来实现它,如下所示检查这里的输出https://eval.in/809971

      <?php
         $arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
         $oneD = array();
         array_walk_recursive($arrOrg,function ($a) use (&$oneD){
              $oneD[] = $a;
      
         });
         echo "Maximum value = ".max($oneD);
      

      【讨论】:

      • @BikashP 目前接受的来自 Sumit 的答案是一个 hacky 解决方法,如果存在高于数组中所有其他值的键值,可能会失败。出于这个原因,这个答案是最简洁、最聪明、最强大的解决方案,只有两个函数,没有条件。 (+1) 注意不要破坏 Sumit 的意愿:sandbox.onlinephpfunctions.com/code/…
      【解决方案5】:

      我认为将数组转换为json,...删除“[”和“]”,然后将字符串重新转换为数组不是找到最大值的算法。无论如何,......在php中它可以工作。用几行。我认为是一个非常漂亮的解决方案^_^。

      但我也想用这段代码为这个问题付出两分钱。

      $highest = null;
      
      array_walk_recursive($arrOrg, function($item, $key) use (&$highest) {
          if (!isset($highest) || $highest < $item) {
              $highest = $item;
          }
      });
      
      echo $highest;
      

      【讨论】:

      • 有点挑剔,但如果它是一个全负数的数组呢?
      • 感谢您的提问。
      【解决方案6】:

      你可以使用这个方法来做到这一点。

      <?php
      
      $array = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
      $highest_value=0;
      get_highest_value($array);
      function get_highest_value($array){
          foreach($array as $val){
              if(is_array($val)){
                  get_highest_value($val);
              }else{
                  if($GLOBALS['highest_value'] < $val){
                      $GLOBALS['highest_value'] = $val;
                  }
              }
          }
      }
      echo $highest_value; // output 100
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 2015-04-22
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 2017-10-16
        相关资源
        最近更新 更多