PHP如何根据一维数组的Unit值对多维数组重新排序
根据自定义Unit顺序排序多维数组
这问题我熟,咱们可以这么搞:核心思路是先把一维数组转换成「值→排序优先级」的映射表,再用这个映射表来给多维数组做自定义排序,不管一维数组本身是升序、降序还是乱序,都能严格匹配它的顺序。
下面是针对你场景的PHP实现示例:
步骤1:准备输入数据
// 你的原始多维数组 $multiArray = [ ['ID' => 5068, 'Item' => 2737, 'Unit' => 15], ['ID' => 5067, 'Item' => 2737, 'Unit' => 13] ]; // 作为排序参照的一维数组 $referenceArray = [11, 13, 15];
步骤2:生成优先级映射表
把一维数组的元素作为键,它的索引作为优先级值,这样能快速查到每个Unit对应的排序位置:
$priorityMap = array_flip($referenceArray); // 此时$priorityMap为:[11=>0, 13=>1, 15=>2]
步骤3:自定义排序多维数组
用PHP的usort函数,结合优先级映射来比较元素:
usort($multiArray, function($a, $b) use ($priorityMap) { // 取出两个元素Unit对应的优先级,不在映射里的元素默认放最后 $priorityA = $priorityMap[$a['Unit']] ?? PHP_INT_MAX; $priorityB = $priorityMap[$b['Unit']] ?? PHP_INT_MAX; // 按优先级从小到大排序(对应一维数组的顺序) return $priorityA - $priorityB; });
最终输出
打印排序后的数组,就是你期望的结果:
print_r($multiArray); // 输出: // Array ( // [0] => Array ( [ID] => 5067 [Item] => 2737 [Unit] => 13 ) // [1] => Array ( [ID] => 5068 [Item] => 2737 [Unit] => 15 ) // )
补充说明
- 如果多维数组里有Unit值不在一维数组中的元素,上面的代码会把这类元素放到排序结果的最后,你可以根据需求调整兜底逻辑;
- 这个方法完全不依赖一维数组的自然排序规则,只严格遵循你给定的参照顺序。
内容的提问来源于stack exchange,提问作者shah rushabh
相关产品推荐
相关产品推荐

