PHP - 使用递归函数查找嵌套数组的max()

时间:2014-02-13 05:52:01

标签: php arrays

以下代码使用一种简单的策略来查找嵌套数组的最大值。它使用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);
?>

2 个答案:

答案 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