如何使用max()
从数组中选择4个最高值,而不仅仅是1?
答案 0 :(得分:10)
您可以使用SplMaxHeap
function maxN(array $numbers, $n)
{
$maxHeap = new SplMaxHeap;
foreach($numbers as $number) {
$maxHeap->insert($number);
}
return iterator_to_array(
new LimitIterator($maxHeap, 0, $n)
);
}
用法(demo):
print_r( maxN( array(7,54,2,4,26,7,82,4,34), 4 ) );
答案 1 :(得分:7)
你可以试试这个:
$a = array(3,5,6,1,23,6,78,99);
asort($a);
var_dump(array_slice($a, -4));
HTH。
答案 2 :(得分:6)
这将在Θ(n)时间内完成:
$a = $b = $c = $d = null;
foreach($array as $v) {
if(!isset($a) || $v > $a) {
$d = $c;
$c = $b;
$b = $a;
$a = $v;
}elseif(!isset($b) || $v > $b) {
$d = $c;
$c = $b;
$b = $v;
}elseif(!isset($c) || $v > $c) {
$d = $c;
$c = $v;
}elseif(!isset($d) || $v > $d) {
$d = $v;
}
}
$result = array($a, $b, $c, $d);
答案 3 :(得分:2)
function maxs($ar, $count=4)
{
$res = array();
foreach ($ar as $v)
{
for ($i = 0;$i < $count;$i++)
{
if ($i >= count($res) || $v > $res[$i])
{
do
{
$tmp = $res[$i];
$res[$i] = $v;
$v = $tmp;
$i++;
}
while ($i < $count);
break;
}
}
}
return $res;
}
答案 4 :(得分:1)
使用php预定义函数的简单方法。
<?php
$arr = array(6, 8, 3, 2, 7, 9);
rsort($arr);
$first = array_shift($arr);
$second = array_shift($arr);
$third = array_shift($arr);
echo $first; // print 9
echo $second; // print 8
echo $third; // print 7
?>
答案 5 :(得分:0)
存储自身时,只要插入新项目,就可以维护另一个数组。如果插入的项目更大,则检查内部数组中的最大值是否插入此项目。在项目流行期间做反之亦然。从内部维护的数组中,您可以获得尽可能多的最大数字。