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);
代码逻辑解释
- 数组合并:用
array_merge()把两个源数组合并成一个包含所有时段对象的大数组。 - 临时存储累加:用
$tempStorage的键存储时段字符串,这样相同时段会自动匹配;如果时段已存在,就把对应booked值累加,不存在则克隆原对象存入(克隆是为了避免后续修改影响原数组的对象)。 - 格式转换:用
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
相关产品推荐
相关产品推荐

