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

PHP实现时间段预订统计时数组重复键名值累加需求

实现重复时间戳键的场地空间值累加统计

我之前也碰到过类似的需求——要统计特定时间段内的已预订事件对应的场地空间总和,想用时间戳组合作为数组键,值对应场地空间的累加值。先看看现有数据源$data的结构:

Array ( 
    [0] => stdClass Object ( 
        [id] => 7 
        [start] => 2019-06-30 
        [end] => 2019-06-30 
        [start_time] => 11:00:00 
        [end_time] => 12:00:00 
        [hall_space] => 2 
    ) 
    [1] => stdClass Object ( 
        [id] => 9 
        [start] => 2019-06-30 
        [end] => 2019-06-30 
        [start_time] => 11:00:00 
        [end_time] => 12:00:00 
        [hall_space] => 2 
    ) 
)

最开始写的代码逻辑是用带循环索引的键来避免覆盖,但这样没法实现累加;如果去掉索引,重复的键又会直接覆盖原有值,只能保留最后一个值:

$booked = array();
foreach($data as $dk => $dv){
    $time_stamp = strtotime($dv->start.' '.$dv->start_time).'_'.strtotime($dv->end.' '.$dv->end_time).'_'.$dk;
    $booked[$time_stamp] = $dv->hall_space; // 这里注意原代码里的`rink_space`应该是数据源里的`hall_space`,要对应上字段名
}

想要实现键重复时自动累加值的话,只需要调整循环里的逻辑,判断键是否存在即可:

$booked = array();
foreach($data as $dv){
    // 生成统一的时间戳组合键,去掉循环索引
    $time_stamp = strtotime($dv->start.' '.$dv->start_time) . '_' . strtotime($dv->end.' '.$dv->end_time);
    
    // 判断键是否存在,存在则累加,不存在则赋值
    if(isset($booked[$time_stamp])){
        $booked[$time_stamp] += $dv->hall_space;
    } else {
        $booked[$time_stamp] = $dv->hall_space;
    }
}

执行这段代码后,就能得到期望的累加结果:

Array ( 
    [1561892400_1561896000] => 4 
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:29:40