如何检测$DatesToDelete数组中的日期是否存在于$ArrayAllDates数组中?
解决PHP数组日期检测问题
先说说你原代码的问题
- 变量名错误:用了未定义的
$b,且$arrayalldates大小写和原数组$ArrayAllDates不一致(PHP变量名区分大小写) - 逻辑绕弯:你的需求是检查
$DatesToDelete里的日期是否在$ArrayAllDates中,没必要嵌套两层foreach,反而把逻辑搞复杂了
方法一:基础循环检测(适合新手理解)
直接遍历$DatesToDelete的每个日期,用in_array()检查是否存在于$ArrayAllDates中,代码简单直观:
// 遍历要检测的日期列表 foreach ($DatesToDelete as $date) { // 检查当前日期是否在全量日期数组里 if (in_array($date, $ArrayAllDates)) { echo "日期 {$date} 存在于ArrayAllDates中\n"; // 这里可以添加你的后续处理逻辑,比如记录、删除操作等 } else { echo "日期 {$date} 不存在于ArrayAllDates中\n"; } }
方法二:用array_intersect直接求交集(更高效简洁)
如果只需要知道哪些日期存在,不需要逐个处理,可以用array_intersect()直接获取两个数组的交集,也就是同时存在于两个数组中的日期:
// 获取两个数组的交集,即存在于ArrayAllDates中的DatesToDelete日期 $existingDates = array_intersect($DatesToDelete, $ArrayAllDates); // 输出结果 if (!empty($existingDates)) { echo "存在的日期有:" . implode(', ', $existingDates) . "\n"; } else { echo "没有日期存在于ArrayAllDates中\n"; }
补充:
array_intersect()返回的是去重后的交集结果。如果需要统计$ArrayAllDates中目标日期的重复次数,可以先统计频次再查询:
// 先统计全量日期的出现次数 $dateCounts = array_count_values($ArrayAllDates); foreach ($DatesToDelete as $date) { if (isset($dateCounts[$date])) { echo "日期 {$date} 存在,共出现 {$dateCounts[$date]} 次\n"; } else { echo "日期 {$date} 不存在\n"; } }
内容的提问来源于stack exchange,提问作者Pascal
相关产品推荐
相关产品推荐

