4

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

$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;
}
4

3 回答 3

2

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

如果您需要不断找到该数组的最大值,我建议您对数组进行排序或尽可能使用不同的(排序的)数据结构。

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

于 2012-08-18T05:31:44.990 回答
1

确实,您正在做的将是在多维数组中搜索最大值的最佳方法。利用递归查找深度并检查更大的数字。抱歉,没有内置函数可以执行此操作。

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

usort 可能有用吗?

于 2012-08-18T05:46:37.570 回答
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

于 2012-08-18T07:34:06.030 回答