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

如何检测$DatesToDelete数组中的日期是否存在于$ArrayAllDates数组中?

解决PHP数组日期检测问题

先说说你原代码的问题

  1. 变量名错误:用了未定义的$b,且$arrayalldates大小写和原数组$ArrayAllDates不一致(PHP变量名区分大小写)
  2. 逻辑绕弯:你的需求是检查$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:10:23