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

PHP二维数组差值计算:保留年月键的实现方法求助

PHP关联数组按年月键做差值计算的实现方案

我来帮你解决这个问题,其实核心就是利用PHP关联数组的键(也就是你的年月字符串)来匹配对应的值进行运算,同时完整保留这些键。下面是具体的实现步骤和代码:

首先,先把你的原始数组明确出来:

// 第一个数组(被减数)
$arr1 = [
    "2018-05" => "15",
    "2018-06" => "100"
];

// 第二个数组(减数)
$arr2 = [
    "2018-05" => "5"
];

方法一:兼容所有可能的键(包含两个数组的所有年月)

这个方法会处理两个数组中出现的所有年月键,不管它只在某一个数组里存在:

// 获取两个数组的所有唯一键(确保不遗漏任何年月)
$allKeys = array_unique(array_merge(array_keys($arr1), array_keys($arr2)));

$result = [];
foreach ($allKeys as $yearMonth) {
    // 将字符串值转为整数,避免字符串运算的潜在问题
    $value1 = isset($arr1[$yearMonth]) ? (int)$arr1[$yearMonth] : 0;
    $value2 = isset($arr2[$yearMonth]) ? (int)$arr2[$yearMonth] : 0;
    
    // 计算差值后转回字符串,和原始数组的类型保持一致
    $result[$yearMonth] = (string)($value1 - $value2);
}

// 输出结果
print_r($result);

运行后你会得到想要的结果:

Array
(
    [2018-05] => 10
    [2018-06] => 100
)

方法二:仅保留第一个数组的键(更贴合你的示例场景)

如果你的需求是只保留第一个数组里的年月键(也就是只计算第一个数组存在的项),可以简化代码:

$result = [];
foreach ($arr1 as $yearMonth => $value1) {
    $value2 = isset($arr2[$yearMonth]) ? (int)$arr2[$yearMonth] : 0;
    $result[$yearMonth] = (string)((int)$value1 - $value2);
}

print_r($result);

这个代码同样能得到你期望的输出,因为当第二个数组没有对应键时,我们默认减数为0,自然就保留了第一个数组的原始值。

关键要点说明

  • 利用array_keys()获取数组的年月键,通过array_merge()和array_unique()确保所有键都被覆盖
  • 用isset()检查键是否存在,避免出现「Undefined index」的错误
  • 显式将字符串值转为整数计算,比直接用字符串减法更安全可靠
  • 最后转回字符串类型,和你原始数组的值类型保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:26:36