PHP如何基于另一数组的元素值而非键对目标数组进行排序
PHP按指定ID序列排序WP_Post对象数组
实现逻辑如下:
- 先将有序ID数组转换为ID对应排序权重的映射表,避免排序过程中重复遍历ID数组查询索引,提升排序效率
- 基于
usort()自定义排序回调,通过两个WP_Post对象ID对应的权重值对比完成排序
输入数据示例:
// 有序ID数组 $sortedIds = [ 16351, 18468, 17160, 1851, 10734, 18623, 17813, 14341 ]; // 待排序的WP_Post对象数组 $unsortedPosts = [ new WP_Post((object)['ID' => 18623, 'post_author' => 57]), new WP_Post((object)['ID' => 18468, 'post_author' => 57]), // 其余对象省略 ];
核心实现代码:
// 生成ID到排序权重的映射 $idWeightMap = array_flip($sortedIds); // 自定义排序 usort($unsortedPosts, function ($a, $b) use ($idWeightMap) { // 处理ID不在有序列表中的场景,默认排到末尾 $weightA = $idWeightMap[$a->ID] ?? PHP_INT_MAX; $weightB = $idWeightMap[$b->ID] ?? PHP_INT_MAX; return $weightA <=> $weightB; }); // 排序完成后$unsortedPosts就是按照指定ID顺序排列的结果
如果需要把不在有序ID列表里的文章排到最前面,只需把代码中的PHP_INT_MAX替换为-1即可。
内容的提问来源于stack exchange,提问作者pimi
相关产品推荐
相关产品推荐

