如何通过groupTaskUuid对比数组并返回对应purchaseOrderGroupTasks值
如何根据GroupTaskUuid匹配对应的purchaseOrderGroupTasks值?
先明确你的需求场景:
- 原始记录数组:
array:3 [ 0 => array:2 [ "groupTaskUuid" => "98790287437987860" "purchaseOrderGroupTasks" => "98790287437987893" ] 1 => array:2 [ "groupTaskUuid" => "98790287437987862" "purchaseOrderGroupTasks" => "98790287437987894" ] 2 => array:2 [ "groupTaskUuid" => "98790287437987861" "purchaseOrderGroupTasks" => "98790287437987895" ] ]
- 目标GroupTaskUuid数组:
array:2 [ 0 => "98790287437987862" 1 => "98790287437987861" ]
- 期望得到对应
purchaseOrderGroupTasks值的数组:
array:2 [ "0" => "98790287437987894" "1" => "98790287437987895" ]
最高效的做法是先把原始记录转成以groupTaskUuid为键,purchaseOrderGroupTasks为值的映射表,这样后续匹配就是O(1)的快速查找,比循环遍历匹配效率高很多,尤其是数据量大的时候。
PHP实现方案
// 原始记录数组 $records = [ ["groupTaskUuid" => "98790287437987860", "purchaseOrderGroupTasks" => "98790287437987893"], ["groupTaskUuid" => "98790287437987862", "purchaseOrderGroupTasks" => "98790287437987894"], ["groupTaskUuid" => "98790287437987861", "purchaseOrderGroupTasks" => "98790287437987895"] ]; // 目标uuid数组 $targetUuids = ["98790287437987862", "98790287437987861"]; // 一步生成uuid和对应值的映射表 $uuidMap = array_column($records, 'purchaseOrderGroupTasks', 'groupTaskUuid'); // 从映射表中提取目标uuid对应的值 $result = array_map(function($uuid) use ($uuidMap) { // 用?? null处理目标uuid不存在的情况,避免报错 return $uuidMap[$uuid] ?? null; }, $targetUuids); print_r($result);
运行后就能得到你想要的结果。这里用到的array_column是PHP内置的高效函数,专门用来从多维数组中提取指定列,同时支持指定另一列作为键,非常适合做这种映射。
JavaScript实现方案
如果你是在前端或者Node.js环境下,也可以用类似的思路:
const records = [ {groupTaskUuid: "98790287437987860", purchaseOrderGroupTasks: "98790287437987893"}, {groupTaskUuid: "98790287437987862", purchaseOrderGroupTasks: "98790287437987894"}, {groupTaskUuid: "98790287437987861", purchaseOrderGroupTasks: "98790287437987895"} ]; const targetUuids = ["98790287437987862", "98790287437987861"]; // 用reduce生成映射对象 const uuidMap = records.reduce((map, item) => { map[item.groupTaskUuid] = item.purchaseOrderGroupTasks; return map; }, {}); // 提取目标值 const result = targetUuids.map(uuid => uuidMap[uuid] || null); console.log(result);
这个方案里用reduce把数组转成键值对对象,再用map遍历目标数组取值,逻辑和PHP方案完全一致,同样能得到期望的结果。
内容的提问来源于stack exchange,提问作者Bryant Tang
相关产品推荐
相关产品推荐

