PHP如何基于两个数组的匹配键生成带额外值的第三个数组
PHP数组合并实现方案
可直接运行的实现代码
// 构建以时间为键的映射,同时初始化结果数组基础数据 $timeMap = []; $graph3 = []; // 处理graph1的所有数据,默认填充第2位为0 foreach ($graph1 as $item) { $timeTag = $item[0]; $timeMap[$timeTag] = true; $graph3[$timeTag] = [ 0 => $timeTag, 1 => $item[1], 2 => 0 ]; } // 处理graph2的所有数据,匹配更新或新增项 foreach ($graph2 as $item) { $timeTag = $item[0]; $graph2Val = $item[1]; if (isset($timeMap[$timeTag])) { // 时间匹配,更新第2位的值 $graph3[$timeTag][2] = $graph2Val; } else { // 时间仅存在于graph2,新增符合规则的项 $graph3[$timeTag] = [ 0 => $timeTag, 1 => 0, 2 => $graph2Val ]; } } // 按时间升序排序,重置为数字索引数组 ksort($graph3); $graph3 = array_values($graph3); // 输出验证结果 print_r($graph3);
实现原理解析
- 原生
array_merge、array_push不适用的原因:两类函数仅做数组的拼接、追加操作,不支持自定义的「时间标识匹配」逻辑,也无法自动填充规则要求的默认值,因此无法直接满足需求。 - 本次实现核心逻辑:
- 用时间标识作为关联数组的键,实现O(1)复杂度的匹配查找,避免两层循环遍历带来的性能损耗
- 第一轮遍历
$graph1初始化结果集,直接满足「仅存在于graph1的时间第2位设为0」的规则 - 第二轮遍历
$graph2做增量更新,同时处理匹配更新和新增项两种场景 - 最后按时间排序、重置索引,输出结构和预期完全一致
内容的提问来源于stack exchange,提问作者paul724
相关产品推荐
相关产品推荐

