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

PHP按条件合并数组求助:匹配time字段填充name值

问题分析与解决方案

错误原因

你的双层循环逻辑存在问题:内层循环会遍历所有$tasks元素,即使找到匹配的time并设置了正确的name,后续不匹配的task会再次将name覆盖为null。比如处理07:30时,第一个task匹配成功设置name为john,但第二个task不匹配,又把name设为null,最终导致匹配值丢失。

正确实现

方案一:优化双层循环逻辑

先默认name为null,找到匹配项后立即跳出内层循环,避免被后续元素覆盖:

$full = [];
foreach ($wt as $item) {
    $entry = ['time' => $item['time'], 'name' => null];
    foreach ($tasks as $task) {
        if ($item['time'] === $task['time']) {
            $entry['name'] = $task['name'];
            break; // 找到匹配后终止内层循环
        }
    }
    $full[] = $entry;
}

方案二:预处理任务数组(更高效)

将$tasks转换为以time为键的关联数组,通过键值直接查找,避免重复循环,适合数据量较大的场景:

// 预处理:把tasks转成time为键、name为值的数组
$taskMap = array_column($tasks, 'name', 'time');

$full = [];
foreach ($wt as $item) {
    $time = $item['time'];
    $full[] = [
        'time' => $time,
        'name' => isset($taskMap[$time]) ? $taskMap[$time] : null
    ];
}

两种方案执行后,都能得到你期望的结果:

$full = [
    ['time' => '07:00', 'name' => null],
    ['time' => '07:30', 'name' => 'john'],
    ['time' => '08:00', 'name' => 'fred'],
    ['time' => '08:30', 'name' => null],
    ['time' => '09:00', 'name' => null],
    ['time' => '09:30', 'name' => null],
];

内容的提问来源于stack exchange,提问作者Lyubomir Bumbarov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:00:53