PHP如何查找数组匹配结果合并值后并入另一关联数组
PHP数组按epid匹配合并hash字段实现方案
实现思路
- 第一步先遍历第一个数组,以epid为键归集所有对应hash值,生成哈希映射表,避免嵌套循环降低执行效率
- 第二步遍历第二个数组,直接从哈希映射表中取出对应epid的hash数组,追加到当前元素中即可
实现代码
<?php // 示例为数组格式,若实际使用的是对象格式,把数组访问语法[]改成->即可 $arr1 = [ ["epid" => "123", "hash" => "xxxxxx"], ["epid" => "456", "hash" => "xxxxxx"], ["epid" => "789", "hash" => "xxxxxx"], ["epid" => "123", "hash" => "xxxxxx"], ["epid" => "123", "hash" => "xxxxxx"], ]; $arr2 = [ ["epid" => "123", "name" => "This is a title"], ["epid" => "456", "name" => "This is a title"], ["epid" => "789", "name" => "This is a title"], ]; // 1. 生成epid到hash数组的映射表 $hashMap = []; foreach ($arr1 as $item) { $epid = $item['epid']; if (!isset($hashMap[$epid])) { $hashMap[$epid] = []; } $hashMap[$epid][] = $item['hash']; } // 2. 给arr2追加hash字段 foreach ($arr2 as &$item) { $item['hash'] = $hashMap[$item['epid']] ?? []; } unset($item); // 销毁引用,避免后续逻辑操作变量时出现异常 // 打印验证结果 print_r($arr2); ?>
效果说明
运行后得到的$arr2和你预期的输出完全一致,epid为123的元素对应3个hash值,其余两个epid各对应1个hash值。如果出现$arr2中存在某个epid在$arr1中没有匹配项的情况,会默认赋值为空数组,你可以根据业务需求调整默认值。
内容的提问来源于stack exchange,提问作者Keith Petrillo
相关产品推荐
相关产品推荐

