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

PHP中如何基于值获取两个数组的差异?(附示例问题)

解决数组时间值差异对比的问题

嘿,我来帮你搞定这个问题!你遇到的情况主要有两个核心原因:

1. array_diff_assoc() 不是你需要的函数

array_diff_assoc() 会同时比较数组的键和值,只有当键和值都完全匹配时,才会认为两个元素是相同的。你的两个数组键完全不对应(比如array1里的"11:00 am"在键3,array2里的"11:00 am"在键4),再加上时间字符串格式不一致,自然会返回整个array2。你需要的是只对比值的差异,应该用array_diff(),不过还要先解决第二个问题。

2. 时间字符串格式不统一

"8:00 am" 和 "08:00 am" 是字面量不同的字符串,即使它们代表同一个时间,PHP也会把它们当成不同的值。所以第一步要把两个数组的时间字符串转换成统一格式,再做对比。

具体实现代码

首先写一个时间格式化函数,把所有时间转换成统一的带前导零的12小时制格式:

function standardizeTime($timeStr) {
    $time = DateTime::createFromFormat('h:i a', $timeStr);
    // 解析成功就返回标准化格式,失败则返回原字符串(处理异常情况)
    return $time ? $time->format('h:i a') : $timeStr;
}

然后处理数组并对比差异:

$array1 = ["8:00 am","8:30 am","10:00 am","11:00 am","11:45 am","1:30 pm","2:30 pm","3:30 pm","4:15 pm", "8:00 am","8:30 am","10:15 am","11:30 am","1:00 pm","2:30 pm","3:45 pm","8:00 am"];
$array2 = ["08:00 am","08:45 am","09:30 am","10:15 am","11:00 am","11:45 am","12:30 pm","01:15 pm", "02:00 pm", "02:45 pm","03:30 pm","04:15 pm","05:00 pm"];

// 标准化两个数组的时间格式
$stdArray1 = array_map('standardizeTime', $array1);
$stdArray2 = array_map('standardizeTime', $array2);

// 获取array2中不存在于array1的值
$diffFromArray2 = array_diff($stdArray2, $stdArray1);

// 如果需要保留array2中的原始时间字符串(而不是标准化后的),可以这样做:
$originalDiff = [];
foreach ($array2 as $time) {
    if (!in_array(standardizeTime($time), $stdArray1)) {
        $originalDiff[] = $time;
    }
}

// 输出结果
var_dump($diffFromArray2);
var_dump($originalDiff);

结果说明

  • $diffFromArray2 会返回标准化后,array2中不在array1里的时间值:
    array(7) {
      [1]=> string(8) "08:45 am"
      [2]=> string(8) "09:30 am"
      [6]=> string(8) "12:30 pm"
      [7]=> string(8) "01:15 pm"
      [8]=> string(8) "02:00 pm"
      [9]=> string(8) "02:45 pm"
      [12]=> string(8) "05:00 pm"
    }
    
  • $originalDiff 则保留了array2中的原始字符串格式,结果和上面一致只是值是原始的。

如果需要双向差异(即array1中不在array2的,加上array2中不在array1的),可以用:

$bidirectionalDiff = array_merge(array_diff($stdArray1, $stdArray2), array_diff($stdArray2, $stdArray1));

内容的提问来源于stack exchange,提问作者user14289833

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:32:52