Php 如何在多维数组中找到最大值?

Php 如何在多维数组中找到最大值?,php,recursion,multidimensional-array,max,Php,Recursion,Multidimensional Array,Max,我有以下数组: $ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 我需要在递归的帮助下比较它的所有元素,以找到最大值 我设法在最深的数组中找到了最高值: $ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); function arr_max_rec($ar3) { $max = $ar3[0];

我有以下数组:

$ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676);
我需要在递归的帮助下比较它的所有元素,以找到最大值

我设法在最深的数组中找到了最高值:

$ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 

function arr_max_rec($ar3)
{
    $max = $ar3[0];
    foreach ($ar3 as $key => $value){
        if ($max < $ar3[$key] and !is_array($value)){
            $max = $ar3[$key];
        }
        elseif (is_array($ar3[$key])){
            return arr_max_rec($ar3[$key]);
        }
    }return $max;
}
echo arr_max_rec($ar3);
$ar3=array(123,array(12665,array(77255,9856),8),1155676);
函数arr_max_rec($ar3)
{
$max=$ar3[0];
foreach($ar3作为$key=>$value){
if($max<$ar3[$key]和!is_数组($value)){
$max=$ar3[$key];
}
elseif(is_数组($ar3[$key])){
返回arr_max_rec($ar3[$key]);
}
}返回$max;
}
回音arr_max_rec($ar3);

但我需要比较所有的数字,找出最高的一个。数组的深度可以是任意的。

您可以尝试使用递归函数

    <?php

    $ar3=array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 

    function highestValue($ar3) {
       foreach($ar3 as $key => $value) {
           if (is_array($value)) {
               $ar3[$key] = highestValue($value);
           }
       }

         return max($ar3);
    }

    echo highestValue($ar3); //1155

以下方法可行:

<?php

function arr_max_rec($ar3)
{   //                  \
    //                   |
    //     / reduce the input array to a single value using
    //     |             |
    //     |             |    / the given callback
    //     |             |    |
    return array_reduce($ar3, function ($a, $b) {
        //                                /
        //  / return the           -------
        //  |                     /
        //  |   / max value of $a, $b. But if $b
        //  |   |
        //  |   |        / is an array, recurse first
        //  |   |        |              |
        return max($a, is_array($b) ? arr_max_rec($b) : $b);

    }, PHP_INT_MIN);
}

@下面是您的答案,请根据下面的说明更正您的代码 一:


产出:1155


PHP已经提供了一个本机递归函数来遍历所有称为的多维数组。这提供了一行干净、简洁、直观的代码。当未来的开发人员查看您的代码时,他们将立即知道您的代码行试图实现什么,而无需遵循多行代码和逻辑。这将实现更好的可维护性,并表明您知道用于手头任务的直接工具

$max
建立基值或默认值后,您将编写一个(或“闭包”)来处理条件逻辑。闭包的精巧之处在于它们有自己的“作用域”——这意味着函数外部无法使用其中的变量(至少,没有帮助也不行)
global
声明通常是不可取的(在许多情况下,这是一个坏习惯,每次迭代时都会读取该行),即使它们是出于好意,因此
use()
将用作导入变量和
&
(这使得变量为“”)将用作将变量从函数范围导出回全局范围的方法

代码:()

*
array\u walk\u recursive()
返回
true
false
。不能在闭包内使用
return
$max
移动到全局范围

*如果最初将
$max
声明为
0
(因为您不希望出现负值),则不需要在条件表达式中检查
$max==null


*如果您正在处理过深的多维数组(如数百个级别),则可能会发生堆栈崩溃。我试图找到该声明的引用,但我在任何地方都找不到链接——不过我确实在某个地方读过。

而不是
sort
array\u pop
你可以使用
return max($ar3)
@antesoles更新了代码并尝试了它。很抱歉,它不起作用。只需尝试更改255-->2255,您就会看到。它仍将输出1155。
<?php
$ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 
$first = intval($ar3[0]);
$min = '' ;
$max = '' ;
foreach($ar3 as $data) {
    $array= intval($data);
    if($array<= $min ) {
        $min =  $array;
    }
    if($array> $max ) {
        $max =  $array;
    }
}
echo "  max = $max \n " ;
?>
<?php
    $ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676); 
    function arr_max_rec($ar3){
        $max = $ar3[0];
        foreach($ar3 as $val){          
            if(!is_array($val) && $max < $val){
                $max = $val;
            }
            else if(is_array($val)){
                arr_max_rec($val);
            }
        }
        return $max;
    }
    echo arr_max_rec($ar3); 
?>
$ar3 = array(123, array(12, 665, array(77, 255, 98, 56), 8), 1155, 676);
$max = null;  // declare a non-integer or minimum value here

array_walk_recursive($ar3, function($v)use(&$max){if($max === null || $v > $max) $max = $v;});
echo $max;  // output: 1155