Php 尝试用10个以上的最小值结束循环

Php 尝试用10个以上的最小值结束循环,php,sorting,Php,Sorting,我已经有了代码,可以循环遍历我网站的每个成员,并可以检索特定的变量(在本例中是$duration) 我想做的是找到10个持续时间最低的人,将他们放入一个有序的数组或列表中,然后在10个循环中循环,并将其输出 作为一个用例,让我们假设100个成员中有10个人的持续时间为10、20、30、40等等,我们将假设其他90个成员的持续时间在101-1000之间 当我循环遍历每个成员时,我想看看该成员的持续时间值是否低于我在某个容器(数组?)中已有的10个值中的任何一个,并且在最后能够从最低到最高回送出10

我已经有了代码,可以循环遍历我网站的每个成员,并可以检索特定的变量(在本例中是$duration)

我想做的是找到10个持续时间最低的人,将他们放入一个有序的数组或列表中,然后在10个循环中循环,并将其输出

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


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

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

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

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


如果你真的不想把每个项目都放在数组中,你可以创建一个包含50个成员的数组(或者任何你想使用的魔法数字)。您可以使用前50个持续时间填充它,然后对其进行排序。然后,您可以向数组位置10-49添加40个项目,并再次对其进行排序。你可以一次又一次地重复这一点,每次你增加新的持续时间时,保持最低的十项。这样,您可以平衡排序每个项目的性能影响和存储每个项目的内存影响。您可以通过更改数组大小将其拨入。

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

请参见代码板中的示例:


按持续时间对所有成员的列表进行排序,并迭代前十个成员。这些数据在数据库(MySQL或类似数据库)中吗?如果是,您能否将数据作为数据库查询的一部分进行排序?您从哪里获取数据?如果您使用的是某种数据库,那么编写另一个查询可能比使用PHP检索所有成员并循环遍历它们更容易、更快。也许我应该将所有值添加到一个数组中,然后使用for循环仅对前10个值进行排序和回显?我的值的来源从成员的配置文件开始,但随后被用作另一个网站API的查找,我从XML接收数据。这不会像我排序数据库那么容易,抱歉搞混了!这就是我正在采取的解决办法。在收集数据的过程中,我使用了如下函数!empty()开始删除根本没有定义值的用户。这可以提高性能,甚至不用麻烦将这些用户添加到数组中进行排序。我将这样做来完成我的项目。你的解决方案对我很有帮助,我就是这么做的。谢谢
<?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
)