首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在php中排序这个数组的最佳方法是什么?

在php中排序这个数组的最佳方法是什么?
EN

Stack Overflow用户
提问于 2010-02-11 05:15:51
回答 2查看 582关注 0票数 3

对于这个问题,我想不出任何合理的解决方案,除非采用可笑的自定义函数组合。也许你可以对此提供一些新的想法。

我有以下(简化)数组

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [vid_id] => 420037
            [vid_rating] => 2.93827
            [vid_quality] => 2
            [vid_special] => 1
            [vid_weight] => 0
            [vid_position] => 0
            [vid_position_end] => 0
        )

    [1] => Array
        (
            [vid_id] => 420040
            [vid_rating] => 3
            [vid_quality] => 1
            [vid_special] => 1
            [vid_weight] => 0
            [vid_position] => 0
            [vid_position_end] => 0
        )

    [2] => Array
        (
            [vid_id] => 426455
            [vid_rating] => 3.25581
            [vid_quality] => 2
            [vid_special] => 0
            [vid_weight] => 5
            [vid_position] => 1
            [vid_position_end] => 2
        )

    [3] => Array
        (
            [vid_id] => 429804
            [vid_rating] => 3
            [vid_quality] => 2
            [vid_special] => 0
            [vid_weight] => 0
            [vid_position] => 0
            [vid_position_end] => 0
        )

    [4] => Array
        (
            [vid_id] => 420848
            [vid_rating] => 2.94444
            [vid_quality] => 2
            [vid_special] => 0
            [vid_weight] => 3
            [vid_position] => 1
            [vid_position_end] => 2
        )

    [5] => Array
        (
            [vid_id] => 420859
            [vid_rating] => 2.73077
            [vid_quality] => 2
            [vid_special] => 0
            [vid_weight] => 4
            [vid_position] => 1
            [vid_position_end] => 2
        )

    [6] => Array
        (
            [vid_id] => 420524
            [vid_rating] => 2.41379
            [vid_quality] => 2
            [vid_special] => 0
            [vid_weight] => 5
            [vid_position] => 2
            [vid_position_end] => 2
        )

    [7] => Array
        (
            [vid_id] => 419810
            [vid_rating] => 3.13393
            [vid_quality] => 1
            [vid_special] => 0
            [vid_weight] => 0
            [vid_position] => 0
            [vid_position_end] => 0
        )

    [8] => Array
        (
            [vid_id] => 419851
            [vid_rating] => 2.97802
            [vid_quality] => 1
            [vid_special] => 0
            [vid_weight] => 5
            [vid_position] => 1
            [vid_position_end] => 2
        )

    [9] => Array
        (
            [vid_id] => 419843
            [vid_rating] => 2.95349
            [vid_quality] => 1
            [vid_special] => 0
            [vid_weight] => 3
            [vid_position] => 1
            [vid_position_end] => 2
        )

    [10] => Array
        (
            [vid_id] => 419838
            [vid_rating] => 2.73529
            [vid_quality] => 1
            [vid_special] => 0
            [vid_weight] => 4
            [vid_position] => 1
            [vid_position_end] => 2
        )

)

此数组是此mysql查询的结果。

代码语言:javascript
复制
    SELECT 
    vid_id,
    vid_rating,
    vid_quality,
    vid_special,
    vid_weight,
    vid_position,
    vid_position_end
FROM versions
WHERE vid_movid = 'xxxxx' AND vid_status = 1 
ORDER BY vid_special DESC, vid_quality DESC, vid_rating DESC

这输出了一个网站链接列表(为了简单起见,删除了实际链接栏),需要按非常具体的顺序排列。使用几个UNIONed查询就可以完成我需要的工作.但我真的不想求助于此,因为成本会很高,所以我认为操作数组会更容易。

我需要有选择地从这个数组中提取几个链接,并按一定的顺序将它们放在数组的顶部。

  • 标记为vid_position的链接,vid_position_end表示该组将占用的范围。这意味着,如果有几个链接标记了这些位置,只有2个将被推到顶部,如果范围是1-2。如果是1-3,那么前3名就会被占据。
  • 权重表示链接必须排序的顺序。因此,如果有5个不同的链接,有5个不同的重量在1-2的位置范围内,只有前2重量将被推到顶部。其余3人将留在原地。
  • 有不同的链接组。在这种情况下,有一个组1-2和3-3。第一组占据前两个位置,在我的例子中有3个重量类。另一组占据第三个位置,只有一个重量等级。
  • 顺序应该是独立的。如果在1-2组中没有链接,但在3-3中有链接,这意味着3-3分组链接将出现在第一个位置。
EN

回答 2

Stack Overflow用户

发布于 2010-02-11 05:25:30

对于数组中的每个元素,在“sort_by”数组中创建一个条目,其中条目设置为您创建的排序“得分”。

分数是由您的排序算法生成的。请记住,您可以创建一个大的数字得分。例如,最次要的排序顺序乘以10,其次是最次要的排序顺序乘以100,其次是1000,然后将数字相加以获得条目的分数。

然后使用基于另一个数组按键对数组进行排序?将主数组按sort_by数组排序。

添加:这种方法是好的,如果它是缓慢或昂贵的计算出两个原始数组元素之间的排序,因为评分只对每个原始数组元素进行一次。如果排序简单,那么使用uasort可能会更清晰的代码。

票数 1
EN

Stack Overflow用户

发布于 2010-02-11 05:31:16

对于手工定制的数组排序,我将使用乌萨特或其中一个相对函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2242438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档