从多维数组中获取最高值

Get highest value from multidimensional array

这是我的多维数组:

$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

你能帮帮我吗?

也许是这样的:

$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);

你可以使用这个函数。

  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);

您可以使用此方法完成此操作。

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

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

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;
}

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

但是我也想用这段代码来解决这个问题。

$highest = null;

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

echo $highest;

您也可以通过 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);