【问题标题】:Find the biggest number in multidimensional nested arrays in php [duplicate]在php中查找多维嵌套数组中的最大数[重复]
【发布时间】:2018-07-15 19:04:25
【问题描述】:

我有一个与 php 中的多维数组有关的问题。我想通过循环遍历所有数组和嵌套数组来找到随机多维数组中的最大数。

我尝试了很多搜索,但找不到超过 2 级深度嵌套数组的解决方案(例如,最大数可能在 3 级数组中)。

例如,对于这个数组[40, [194, [23, 234, 500], 57], 93, 39, [10, 333, 49]],正确答案应该是500,索引为array[1][1][2],但是如何通过循环到多层深度数组并找到所有这些数组的最大数量?我认为循环不应该只针对这个数组,而是一般针对任何多维数组,但是如果不存在通用解决方案,我想知道关于这个特定数组的一些解释。

谢谢。

【问题讨论】:

  • @KourkenK Andreas 提名 Exact Duplicate 是完全正确的,我支持它。我确实发现之前的重复页面没有提供使用 array_walk_recursive() 的解决方案,所以我添加了一个新的解决方案来演示和解释非常干净/直接/适当的技术。

标签: php arrays multidimensional-array


【解决方案1】:

考虑以下想法:如果元素是数组,则递归调用函数。

这样你就可以解决任何深度的嵌套数组。 佩萨多代码:

function maxInMultiDim($array) {
    $max = 0; //assume all num are positive else assign MIN_INT
    foreach($array as $elem) {
        $temp = $elem;
        if (is_array($elem))
            $elem = maxInMultiDim($elem);
        $max = ($max < $elem ) ? $elem : $max;
    }
    return $max;
}

抱歉有任何语法错误...

【讨论】:

    【解决方案2】:

    如果您知道数组的深度,则可以使用多个循环,每个深度 1 个。例如,对于最多具有 3 个深度的数组,您可以这样做:

    $a = [40, [194, [23, 234, 500], 57], 93, 39, [10, 333, 49]];
    $max = 0;
    foreach ($a as $b) {
        if (is_array($b)) {
            foreach ($b as $c) {
                if (is_array($c)) {
                    foreach ($c as $d) {
                        $max = $d > $max ? $d : $max;
                    }
                } else {
                    $max = $c > $max ? $c : $max;
                }
            }
        } else {
            $max = $b > $max ? $b : $max;
        }
    }
    return $max;
    

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 2023-01-26
      • 2013-10-14
      • 2019-04-30
      • 2013-10-25
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多