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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:24:03