如果不求助于可笑的自定义函数组合,我无法为这个问题想出任何理智的解决方案。或许您可以就此提供一些新鲜的想法。
我有以下(简化的)数组
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 查询可以完成我需要做的事情......但我真的不想诉诸于此,因为成本会非常高,所以我认为操作数组会更容易。
我需要从这个数组中有选择地提取几个链接,并将它们按特定顺序粘贴到数组顶部。
标有 vid_position 的链接,以及 vid_position_end 表示一个范围 该组将占用。意思是 如果有几个标记的链接 有了这些职位,只有 2 个会成为 推到顶部,如果范围是 1-2。如果它是 1-3,那么前 3 位置将被占用。
权重表示其中的ORDER 链接必须排序。所以如果有 5个不同的链接,有5个不同的 位置范围为 1-2 的权重, 只会推送前 2 个权重 到顶部。剩下的3个会 留在原地。
有不同的链接组。 在这种情况下,有一组 1-2, 和3-3。第一组占据 前 2 个位置,在我的示例中 有3个重量等级。另一组 占据第3位,且仅 有 1 个重量级别。
顺序应该是独立的。 如果 1-2 中没有链接 组,但在 3-3 中有链接, 这意味着 3-3 个分组链接将 出现在第一位。
最佳答案
对于数组中的每个元素,在“sort_by”数组中创建一个条目,其中条目设置为您创建的排序“分数”。
分数是由您的算法生成的,用于对您的条目进行排序。请记住,您可以创建带有大量数字的乐谱。例如,最小的排序顺序乘以 10,次要的排序顺序乘以 100,接下来乘以 1000,然后将这些数字相加得到条目的分数。
然后使用Sort an Array by keys based on another Array? 通过 sort_by 数组对主数组进行排序
补充:如果计算两个原始数组元素之间的顺序很慢或代价高昂,则此方法很好,因为每个原始数组元素只进行一次评分。如果排序很容易,那么使用 uasort 可能会是更清晰的代码。
关于php - 在 php 中对这个数组进行排序的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242438/