PHP中按view_date匹配合并两个多维数组并替换t_view值
解决方案
步骤说明
- 预处理数组一:将数组一转换为以
view_date为键、t_view为值的一维关联数组,提升后续日期匹配的查找效率。 - 遍历更新数组二:循环数组二的每一项,根据日期从预处理后的数组中获取对应
t_view值(不存在则保留原0值),完成替换。
代码实现(PHP)
// 定义数组一 $array1 = [ ['view_date' => '2022-09-10', 't_view' => 1], ['view_date' => '2022-09-11', 't_view' => 19] ]; // 定义数组二 $array2 = [ ['view_date' => '2022-09-05', 't_view' => 0], ['view_date' => '2022-09-06', 't_view' => 0], ['view_date' => '2022-09-07', 't_view' => 0], ['view_date' => '2022-09-08', 't_view' => 0], ['view_date' => '2022-09-09', 't_view' => 0], ['view_date' => '2022-09-10', 't_view' => 0], ['view_date' => '2022-09-11', 't_view' => 0] ]; // 预处理数组一:转为日期=>t_view的关联数组 $viewMap = []; foreach ($array1 as $item) { $viewMap[$item['view_date']] = $item['t_view']; } // 遍历更新数组二 foreach ($array2 as &$item) { if (isset($viewMap[$item['view_date']])) { $item['t_view'] = $viewMap[$item['view_date']]; } } unset($item); // 释放引用,避免后续操作污染原数组 // 输出结果 print_r($array2);
代码解释
- 预处理后得到的
$viewMap结构为['2022-09-10' => 1, '2022-09-11' => 19],将日期匹配的时间复杂度从嵌套循环的O(n*m)优化为O(n+m),大幅提升效率。 - 遍历数组二时使用引用
&$item,直接修改原数组元素,无需额外创建新数组占用内存。 - 最后执行
unset($item)销毁引用,防止后续对$item的意外修改影响数组二的内容。
内容的提问来源于stack exchange,提问作者user3909841
相关产品推荐
相关产品推荐

