找到数组中的最大值

时间:2012-08-18 05:19:39

标签: php arrays loops multidimensional-array

我的要求是在数组中找到最大/最大值,其中可能包含其他数组。例如,我们可以查看下面的数组。

$array =
    array(
        13,
        array(10, 4, 111, 3),
        4,
        array(23, 450, 12,array(110, 119, 20, 670), 45 ,45,67,89),
        );

$max = find_max($array, 0);

print "Maximumum Value is  $max";

我已经有了一个工作函数find_max,但我想知道的是除了下面给出的代码之外,还有最好和最有效可能的方法。

function find_max($array, $maxValue) {
    foreach ($array as $member) {
        if (is_array($member)) {
            $maxValue = find_max($member, $maxValue);
        } else {

            if($member==$maxValue){
                continue;
            }
            if ($member > $maxValue) {
                $maxValue = $member;
            }
        }
    }
    return $maxValue;
}

3 个答案:

答案 0 :(得分:2)

您无法比O(n)或linear time更快地找到数组(或数组数组)的最大值。

如果你需要经常找到这个数组的最大值,我建议如果可能的话,对数组进行排序或使用不同的(排序的)数据结构。

您还可以保留对max的引用,并在插入数据时更新它。显然,这假设您自己插入数据而不是从其他地方获取数据,在这种情况下,我的上一条评论对您来说毫无用处。

答案 1 :(得分:1)

真的,你正在做的是在多维数组中搜索max的最佳方法。利用递归来查找深度并检查更大的数字。对不起,这里没有内置功能。<​​/ p>

这是一种基于最内层数组对多维数组进行排序的复杂方法,但它是一个相当复杂的概念。 (搜索它)。

usort可能有用吗?

答案 2 :(得分:1)

找到最大值需要O(n),所以就我所知,你无法大幅改进它。 但是,您可以为代码添加一些小改进:

function find_max($array, $maxValue) {
    foreach ($array as $member) {
        if (is_array($member)) {
            $maxValue = find_max($member, $maxValue);
        } else {
            if ($member > $maxValue) {
                $maxValue = $member;
            }
        }
    }
    return $maxValue;
}

$array =
array(
    13,
    array(10, 4, 111, 3),
    4,
    array(23, 450, 12,array(110, 119, 20, 670), 45 ,45,67,89),
    );
$ans = find_max($array, 0);
echo "ans = $ans";

输出 670