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

PHP中合并两个关联数组并求和对应时段预订量问题

解决关联数组合并并累加相同时段预订量的问题

我来帮你搞定这个需求!核心思路是先把两个数组合并,然后借助一个临时关联数组,以**时段(time)**作为键来统一累加预订量,最后再转成你需要的索引数组格式。

具体实现代码(PHP)

假设你的两个源数组分别是 $array1 和 $array2,可以这样写:

// 合并两个源数组
$combinedArray = array_merge($array1, $array2);
$tempStorage = [];

// 遍历合并后的数组,累加相同时段的预订量
foreach ($combinedArray as $slot) {
    $timeKey = $slot->time;
    if (isset($tempStorage[$timeKey])) {
        // 该时段已存在,累加预订量
        $tempStorage[$timeKey]->booked += $slot->booked;
    } else {
        // 新时段,克隆对象存入临时数组(避免引用修改原数组)
        $tempStorage[$timeKey] = clone $slot;
    }
}

// 将临时关联数组转换为索引数组,得到最终结果
$resultArray = array_values($tempStorage);

// 打印验证结果
print_r($resultArray);

代码逻辑解释

  1. 数组合并:用array_merge()把两个源数组合并成一个包含所有时段对象的大数组。
  2. 临时存储累加:用$tempStorage的键存储时段字符串,这样相同时段会自动匹配;如果时段已存在,就把对应booked值累加,不存在则克隆原对象存入(克隆是为了避免后续修改影响原数组的对象)。
  3. 格式转换:用array_values()把关联数组转成索引数组,完全符合你期望的输出格式。

验证示例输入

用你给出的测试数组运行这段代码,会得到:

Array (
    [0] => stdClass Object ( [time] => 03:00 PM - 04:30 PM [booked] => 6 )
    [1] => stdClass Object ( [time] => 05:00 PM - 06:30 PM [booked] => 2 )
    [2] => stdClass Object ( [time] => 07:00 PM - 08:30 PM [booked] => 1 )
)

完全匹配你的期望输出~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:30:29