如何将一维数组中重复出现的日期值替换为空字符串?
解决日期数组重复项替换为空字符串的问题
你可以通过跟踪已保留的日期来实现需求:只保留每个日期的第一次出现,后续重复的全部替换为空字符串。
完整代码实现
$dateann = ['2024-08-16', '2024-08-11', '2024-08-16', '2024-09-16']; $period = CarbonPeriod::between('2024-08-01', '2024-08-31'); $days = []; foreach ($period as $date) { $days[] = $date->format('Y-m-d'); } $array_dates = array_merge($dateann, $days); // 处理重复日期:保留第一次出现,后续重复项替换为空 $seen = []; foreach ($array_dates as &$date) { if (in_array($date, $seen)) { $date = ''; } else { $seen[] = $date; } } unset($date); // 释放引用,避免后续变量污染 // 输出结果 print_r($array_dates);
代码说明
- 跟踪已处理日期:用
$seen数组记录已经保留过的日期,遍历原数组时做判断:- 若当前日期未被记录过,保留原日期并加入
$seen标记 - 若已存在,则将该位置的值替换为空字符串
- 若当前日期未被记录过,保留原日期并加入
- 直接修改原数组:使用
&$date引用遍历,无需额外创建新数组,节省内存 - 释放引用:遍历结束后
unset($date),防止后续变量被意外修改
效果验证
运行后会输出你期望的结果:
array: [ 0 => "2024-08-16" 1 => "2024-08-11" 2 => "" 3 => "2024-09-16" 4 => "2024-08-01" 5 => "2024-08-02" 6 => "2024-08-03" 7 => "2024-08-04" 8 => "2024-08-05" 9 => "2024-08-06" 10 => "2024-08-07" 11 => "2024-08-08" 12 => "2024-08-09" 13 => "2024-08-10" 14 => "" 15 => "2024-08-12" 16 => "2024-08-13" 17 => "2024-08-14" 18 => "2024-08-15" 19 => "" 20 => "2024-08-17" 21 => "2024-08-18" 22 => "2024-08-19" 23 => "2024-08-20" 24 => "2024-08-21" ]
内容的提问来源于stack exchange,提问作者ghost_of_the_code
相关产品推荐
相关产品推荐

