如何判断数组元素是否存在于另一组数组中并生成对应数据数组
实现按日期匹配生成浏览次数数据数组
现有代码与数据
生成最近7天日期的$labels数组
$now = new \DateTime(); $startDate = $now->modify('-6 day'); $labels = []; $data = []; for ($i = 0; $i <= 6; $i++) { $day = $startDate->modify('+1 day'); $labels[] = $day->format('Y-m-d'); }
$labels输出结果:
$labels = array:7 [▼ 0 => "2023-07-05" 1 => "2023-07-06" 2 => "2023-07-07" 3 => "2023-07-08" 4 => "2023-07-09" 5 => "2023-07-10" 6 => "2023-07-11" ]
查询返回的浏览次数结果$result
$result = array:2 [▼ 0 => array:2 [▶ "numberViews" => 20 "dayDate" => "2023-07-10" ] 1 => array:2 [▶ "numberViews" => 32 "dayDate" => "2023-07-11" ] ]
需要实现的功能
检查$labels中的每个日期是否存在于$result数组中,不存在则对应值设为0,最终生成如下格式的$data数组:
$data = [0,0,0,0,0,20,32]
解决方案
先将$result转换为以日期为键的关联数组,再遍历$labels匹配取值,代码如下:
// 转换$result为日期映射浏览次数的关联数组 $viewMap = []; foreach ($result as $item) { $viewMap[$item['dayDate']] = $item['numberViews']; } // 遍历$labels生成目标$data数组 $data = []; foreach ($labels as $date) { $data[] = $viewMap[$date] ?? 0; }
代码说明
- 将
$result转为关联数组后,可通过日期直接查找对应浏览次数,把每次查找的时间复杂度从O(n)降为O(1),提升处理效率 - 使用PHP7+的
??空合并运算符,简洁处理日期不存在时赋值为0的逻辑
内容的提问来源于stack exchange,提问作者hous
相关产品推荐
相关产品推荐

