如何使用 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个元素的数组,上述函数在大多数情况下会表现得更好。
我有一个数组 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个元素的数组,上述函数在大多数情况下会表现得更好。