php或任何程序语言

时间:2011-02-24 14:32:59

标签: php multidimensional-array max

任何人都可以帮我找到下面给出的数组的最大值。我希望650的结果是最大值......

$my_array = array(array(128,300,140)10,15,array(130,array(500,650))); 

7 个答案:

答案 0 :(得分:3)

在这里,您可以使用3个可读行代码中的RecursiveArrayIterator

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$flattenedArray = iterator_to_array($it);
$max = max($flattenedArray);

或者,如果你不想展平(和复制),但更喜欢迭代(使用更少的内存,但速度更慢):

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$max = 0;
foreach ($it as $value) {
    $max = max($value, $max);
}

答案 1 :(得分:1)

展平数组,然后在其上调用max()。您的示例中max()的返回值应为650。

答案 2 :(得分:1)

也可能是

$data = array(array(128,300,140),10,15,array(130,array(500,650)));
$max = 0;
array_walk_recursive(
    $data,
    function($val) use (&$max) {
        if($val > $max) $max = $val;
    }
);
echo $max; // 650

答案 3 :(得分:0)

您也可以递归地执行此操作,如果该项是数组,则再次调用该函数以从该数组返回最大项。

最后,您应该始终拥有最大项目,然后在最后一次迭代中,您可以从这些结果中调用最大值。

答案 4 :(得分:0)

这就是诀窍:

function flatten($ar) {
    $toflat = array($ar);
    $res = array();
    while (($r = array_shift($toflat)) !== NULL) {
        foreach ($r as $v) {
            if (is_array($v)) {
                $toflat[] = $v;
            } else {
                $res[] = $v;
            }
        }
    }
    return $res;
}

$arr = array(array(128,300,140),10,15,array(130,array(500,650)));
echo max(array_flatten($arr));

编辑:使用How to "flatten" a multi-dimensional array to simple one in PHP?

更新了展平数组

答案 5 :(得分:0)

<?php
$my_array = array(array(128,300,140),10,15,array(130,array(500,650)));

function findLargest($arr) {
    $largest = 0;
    foreach ($arr as $item) {
        if (is_array($item)) {
            $item = findLargest($item);
        }
        if ($item > $largest) {
            $largest = $item;
        }
    }
    return $largest;
}

echo "Largest is ".findLargest($my_array)."\n";

?>

答案 6 :(得分:0)

function maximum($in)
{
  if (!is_array($in)) $max = $in;
  else foreach ($in as $element) 
  {
    $elementMax = maximum($element);
    if (isset($max)) $max = max($elementMax, $max); else $max = $elementMax;
  }

  return $max;
}