尝试结束一个循环,其中包含10个最低值

时间:2011-07-10 15:40:52

标签: php sorting

我已经有代码遍历我的网站的每个成员并且可以检索特定变量(在这种情况下它是$ duration)。

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

作为一个用例,让我们假装100个成员,10个人持续时间 10,20,30,40等...,我们将假装其他90个成员拥有持续时间介于101-1000之间。

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

3 个答案:

答案 0 :(得分:1)

在键盘中查看此示例: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
)

答案 1 :(得分:0)

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

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

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

每次找到新值时都可以尝试排序(插入新值并删除最高值)。这样可以节省阵列的内存存储量,但是当你对每个值进行比较时,它会耗费你的处理能力。即使进行优化,它也可能不够好。

如果你真的不想把数组中的每个项目放在一起,你可以创建一个包含50个成员的数组(或者你想要使用的任何幻数)。您可以使用前50个持续时间填充它,然后对其进行排序。然后你可以再添加40个项目到阵列位置10-49并再次排序。您可以反复重复,每次添加新的持续时间时保留最低的十项。这样你就可以平衡每个项目的排序性能与存储每个项目的内存命中。您可以通过更改阵列大小来拨入。

答案 2 :(得分:0)

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