尝试用10个最低值来结束循环


Trying to end a loop with 10 of the lowest values out of more

我已经通过我的网站的每个成员循环的代码,可以检索一个特定的变量(在这种情况下,它是$duration)。

我要做的是找到具有10个最低持续时间的人,并将它们放入有序的数组或列表中,然后循环通过10和echo

作为一个用例,让我们假设在100个成员中,有10个人的持续时间 10,20,30,40,等等…,我们假设其他90个成员的持续时间介于101-1000之间。

当我循环遍历每个成员时,我想看看该成员的持续时间值是否低于某个容器(数组?)中已有的10个成员中的任何一个,并且在结束时能够从最低到最高地echo出10个

参见codepad: http://codepad.org/4ROaojCT

<?php
$array = array(5, 6, 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13);
sort($array);
$array = array_slice($array, 0, 10);
print_r($array);
结果:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 10
)

因为你必须遍历每个值,所以只需将所有值添加到数组中,然后使用sort方法并获取前10项(0-9)。以下是关于如何准确使用此方法的文档:

http://www.php.net/manual/en/function.sort.php

这个解决方案的好处是它将重新排序值,以便键0与最低值对应。它还可以选择更改您正在进行的比较类型(文本,数字等)

您可以尝试在每次找到新值时进行排序(插入新值并删除最大值)。这将为数组节省内存,但是当你对每个值进行比较时,它将消耗你的处理能力。即使进行了优化,也可能不够好。

如果你真的不想把每个元素都放到数组中,你可以创建一个包含50个成员的数组(或者任何你想使用的神奇数字)。您可以用前50个持续时间填充它,然后对其进行排序。然后,您可以在数组位置10-49中再添加40个元素,并再次排序。你可以一遍又一遍地重复,每次添加新的持续时间时保留最低的10项。这样就可以平衡对每个项目进行排序的性能损失和存储每个项目的内存损失。

将您网站的所有成员存储在散列中,键为持续时间,值为主键或甚至包含成员详细信息的对象。编写一个可以提供给uksort的函数,它将根据键对哈希进行排序。倒过来打印前10名。