以下代码使用一种简单的策略来查找嵌套数组的最大值。它使用foreach来查找和标记最大值,但是,如果我有一个嵌套到两个以上级别的数组,那么我的代码就没用了。任何人都可以向我解释一个函数调用自己的想法,以找到无限的嵌套数组?非常感谢。
以下是我的代码:
<?php
$arr = array("1", "2", array("3", "4"));
foreach($arr as $value){
if(is_array($value)){
foreach($value as $value2){
$max_array=array($value);
// no deeper levels
}
} else {
$max_array=array($value);
}
}
echo max($max_array);
?>
答案 0 :(得分:3)
您可以使用array_walk_recursive()
:
function array_max_recursive($arr)
{
$max = -INF;
array_walk_recursive($arr, function($item) use (&$max) {
if ($item > $max) {
$max = $item;
}
});
return $max;
}
echo array_max_recursive(["1", "2", ["3", "4"]]); // 4
答案 1 :(得分:0)
你想要的是一个递归函数。
该函数查找数组中最大的元素。如果数组中的项是一个数组,它将找到该数组中最大的项并使用它进行比较。
要在该数组中找到最大值,它将使用相同的函数。
function findMax($arr){
$max = 0;
foreach($arr as $item){
if(is_array($item)){
$val = findMax($item);
}else{
$val = $item;
}
$max = $val>$max?$val:$max;
}
return $max;
}
使用示例:
$arr = Array(1,2,Array(3,10,Array(6,7)));
$arr2 = Array(1,2,Array(3,5,Array(6,7)));
echo findMax($arr)."\n".findMax($arr2);
结果:
10个
7