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