【发布时间】:2011-02-24 14:32:59
【问题描述】:
嗨,任何人都可以帮助我找到下面给出的数组的最大值。我希望 650 的结果是最大值....
$my_array = array(array(128,300,140)10,15,array(130,array(500,650)));
【问题讨论】:
标签: php multidimensional-array max
嗨,任何人都可以帮助我找到下面给出的数组的最大值。我希望 650 的结果是最大值....
$my_array = array(array(128,300,140)10,15,array(130,array(500,650)));
【问题讨论】:
标签: php multidimensional-array max
在这里,在 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);
}
【讨论】:
将数组展平,然后在其上调用max()。在您的示例中,max() 的返回值应该是 650。
【讨论】:
也有可能
$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
【讨论】:
您也可以递归地执行此操作,如果项目是一个数组,请再次调用该函数以从该数组中返回最大项目。
最后,您应该始终拥有最大项目,然后在最后一次迭代中,您可以从这些结果中调用最大值。
【讨论】:
这就是诀窍:
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? 更新扁平数组
【讨论】:
<?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";
?>
【讨论】:
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;
}
【讨论】: