在多维数组中找到最高值

时间:2011-11-10 21:14:39

标签: php arrays multidimensional-array

这是多维数组

$arr = array(
    array(141,151,161), 
    2, 
    3, 
    array(
        101, 
        202, 
        array(303,404)
    )
);

如何找到最高值,上面数组中的结果应为404 阵列深度可能超过3。


这是我上次尝试的代码,但我注意到这只能检查到3深度,我需要它可以检查无限深度

function MaxArray($arr){
    foreach($arr as $valueDepth1){
        if(is_array($valueDepth1)){
            foreach($valueDepth1 as $valueDepth2){
                if(is_array($valueDepth2)){
                    foreach($valueDepth2 as $valueDepth3){
                        $checingArray[]=$valueDepth3;
                    }
                }else{
                    $checingArray[]=$valueDepth2;
                }               
            }
        }else{
            $checingArray[]=$valueDepth1;
        }
    }

    return max($checingArray);
}

7 个答案:

答案 0 :(得分:9)

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

   sort($array);

   return array_pop($array);
}

您可以在此处看到它:http://codepad.org/4xPFsU1U

答案 1 :(得分:3)

您可以尝试这样的事情:

$max = -1;
array_walk_recursive($arr, 'arrmax');
function arrmax($item, $key) {
   global $max;
   $max = ($key > $max) ? $key : $max;
}
echo "Maximum number is : " . $max;

答案 2 :(得分:3)

这是我在谷歌第一页上找到的功能。搜索引擎是查找内容的理想场所;)

function recursive_array_max($a) {
    foreach ($a as $value) {
        if (is_array($value)) {
            $value = recursive_array_max($value);
        }
        if (!(isset($max))) {
            $max = $value;
        } else {
            $max = $value > $max ? $value : $max;
        }
    }
    return $max;
}

Source

答案 3 :(得分:2)

这可以是一个很好的起点

getMax($array)
{
   if ( is_array($array) )
   {
      // NOTE: PHP_MIN doesn't exist. Is just to let you understand the logic
      $max = PHP_MIN; 
      foreach($array as $value)
      {
         if ( is_array($value) )
            $value = getMax($value);

         if ($value > $max)
            $max = $value;
      }
      return $max;
   }
   else
      return $array
}

答案 4 :(得分:0)

试一下

function MaxRecursive($arr,$maxVal = null)
{

    try {

        if(! isset($arr) || ! is_array($arr) )
            throw new Exception("The array is empty");

        for($i=0;$i<count($arr);$i++)
        {
            if(is_array($arr[$i]))
                $maxVal =    MaxRecursive($arr[$i],$maxVal);

            else
            {
                if($maxVal == null)
                 $maxVal = $arr[$i];

                if($arr[$i] > $maxVal )
                    $maxVal =  $arr[$i];
            }

        }

        return $maxVal;

    }
    catch (Exception $e)
    {
        echo $e->getMessage();

    }

}
function MaxArray2($arr)
{
    return   MaxRecursive($arr,null);

}

答案 5 :(得分:0)

getMax($arr); 
function getMax($arr) { 
    foreach($arr as $arrr) { 
        echo max($arrr[2]); 
    }
}

答案 6 :(得分:-2)

你必须使用递归,只需一个循环。对于每个元素,如果它是一个数字,我们将它与当前最高值进行比较,如果它是一个数组,我们递归调用该函数来检查数组:

    function getHeighestNumber($array = array()) {
        static $number  = 0;
        foreach ($array AS $key=>$value) {
            if(is_array($value)) {                    
                $number  = getHeighestNumber($value);
            } else if($value > $number) {
                $number  = $value;
            }                
        }
        return $number;
    }