从多维数组

时间:2017-06-02 05:22:45

标签: php multidimensional-array max array-algorithms

这是我的多维数组:

$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

你可以帮帮我吗?

6 个答案:

答案 0 :(得分:7)

也许是这样的:

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

答案 1 :(得分: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);

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

我认为将数组转换为json,...删除&#34; [&#34;和&#34;]&#34;,然后将字符串重新转换为数组不是查找最大值的算法。无论如何,...在PHP中它的工作原理。几行。我认为这是一个非常漂亮的解决方案^ _ ^。

但我想用这段代码给这个问题两分钱。

$highest = null;

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

echo $highest;

答案 4 :(得分:1)

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

答案 5 :(得分:0)

您可以使用此方法执行此操作。

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