如何使用 php 找到数组中的第 n 个最小值?

How to find the n smallest value in array using php?

我有一个数组 As :

$array = array(
0 => 1,
1 => 3,
2 => 7,
3 => 0,
4 => 6,
5 => 3,
);

如何在数组中找到n个较小的数? (例如:n = 4,结果为:0,1,3,3)

<?php

$array = array(
0 => 1,
1 => 3,
2 => 7,
3 => 0,
4 => 6,
5 => 3,
);

sort($array, SORT_NUMERIC);
$array = array_slice($array,0,4);

?>

如果您有大量数组并且需要您的代码在 O(n) 中 运行 而不是 O(n.log(n)),你可以使用这个函数:

function min4($array) {
    $result = [1e300,1e300];
    foreach ($array as $val) {
        if ($val <= $result[1]) {
            array_splice($result, $val > $result[0] ? 1 : 0, 0, [$val]);
        } elseif ($val <= $result[3]) {
            array_splice($result, $val > $result[2] ? 3 : 2, 0, [$val]);
        }
    }
    return array_slice($result, 0, 4);
}

呼叫为:

print_r (min4($array));

当然,对于中等大小的数组,使用sort会得到更好的性能。但是对于已经超过300个元素的数组,上述函数在大多数情况下会表现得更好。