查找数组的前3个子集值

时间:2015-03-20 09:52:59

标签: php arrays

我有一个大约有1000个值的数组,它们是按日期顺序排列的。

我想找到该数据的三个最大子集。最高和最低当然很容易。我写得很快,所以我知道它并不是最好的。

这只是为了尝试一小部分数据。这个例子是在PHP中。

<?php
$values=array(array (1,1),
array (2,2),array (3,553),array (4,455),array (5,655),array (6,774),
array (7,878),array (8,2359),array (9,0),array (10,56),array (11,756),
array (12,1234),array (13,6),array (14,4),array (15,23),array 
(16,763),array (17,235),array (18,72),array (19,465),array (20,7));
$highest=-1;
$runningtotal=0;
$lowest=1000000000000000;
for ($i=0;$i<18;$i++){
    $runningtotal=$values[$i][1]+$values[$i+1][1]+$values[$i+2][1];
    if ($highest<$runningtotal){$highest=$runningtotal;}
    if ($lowest>$runningtotal){$lowest=$runningtotal;}
}
echo $highest."<br>".$lowest;
?>

如何找到它的前3个子集值?

1 个答案:

答案 0 :(得分:0)

<?php
$values=array(
array (1,1),
array (2,2),
array (3,553),
array (4,455),
array (5,655),
array (6,774),
array (7,878),
array (8,2359),
array (9,0),
array (10,56),
array (11,756),
array (12,1234),
array (13,6),
array (14,4),
array (15,23),
array (16,763),
array (17,235),
array (18,72),
array (19,465),
array (20,7)
);
$highest=-1;
$runningtotal=0;
$lowest=1000000000000000;
$scores=array(array());

for ($i=0;$i<18;$i++){
    $runningtotal=$values[$i][1]+$values[$i+1][1]+$values[$i+2][1];
    if ($highest<$runningtotal){$highest=$runningtotal;}
    if ($lowest>$runningtotal){$lowest=$runningtotal;}
    $scores[$i][1]=$runningtotal;
    $scores[$i][2]=$values[$i][0];
    $scores[$i][3]=$values[$i+1][0];
    $scores[$i][4]=$values[$i+2][0];
}

rsort($scores);

echo $highest."<br>".$lowest."<br><br>";

for ($i=0;$i<18;$i++){
    echo $scores[$i][1].": ";
    echo $scores[$i][2].",";
    echo $scores[$i][3].",";
    echo $scores[$i][4]."<br>";
}

?>