我有一个数组As:
(?<name>.*?)\s?\((?<date>\d+)\)$
如何在阵列中找到4个较小的数字?对于这个例子,我的结果是:0,1,3,3
答案 0 :(得分:1)
<?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);
?>
答案 1 :(得分:0)
如果您拥有庞大的数组且需要您的代码在 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多个元素的数组,上述函数在大多数情况下都会表现得更好。