对于这个问题,我想不出任何合理的解决方案,除非采用可笑的自定义函数组合。也许你可以对此提供一些新的想法。
我有以下(简化)数组
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查询的结果。
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查询就可以完成我需要的工作.但我真的不想求助于此,因为成本会很高,所以我认为操作数组会更容易。
我需要有选择地从这个数组中提取几个链接,并按一定的顺序将它们放在数组的顶部。
发布于 2010-02-11 05:25:30
对于数组中的每个元素,在“sort_by”数组中创建一个条目,其中条目设置为您创建的排序“得分”。
分数是由您的排序算法生成的。请记住,您可以创建一个大的数字得分。例如,最次要的排序顺序乘以10,其次是最次要的排序顺序乘以100,其次是1000,然后将数字相加以获得条目的分数。
然后使用基于另一个数组按键对数组进行排序?将主数组按sort_by数组排序。
添加:这种方法是好的,如果它是缓慢或昂贵的计算出两个原始数组元素之间的排序,因为评分只对每个原始数组元素进行一次。如果排序简单,那么使用uasort可能会更清晰的代码。
发布于 2010-02-11 05:31:16
对于手工定制的数组排序,我将使用乌萨特或其中一个相对函数。
https://stackoverflow.com/questions/2242438
复制相似问题