任何人都可以帮我找到下面给出的数组的最大值。我希望650的结果是最大值......
$my_array = array(array(128,300,140)10,15,array(130,array(500,650)));
答案 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;
}