You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:24:10