微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP:自动完成时间间隔

所以,我有一个具有这种结构的值的数组:

$values = array(
    "2012-01-01 00:15:00" => "0.01",
    "2012-01-01 00:30:00" => "0.34",
    "2012-01-01 00:45:00" => "0.51",
);

如您所见,值之间的间隔为15分钟.有时我会错过值,例如:

$values = array(
    "2012-01-01 00:15:00" => "0.01",
    "2012-01-01 00:30:00" => "0.34",
    "2012-01-01 01:01:00" => "0.23",
);

在数组中以正确的顺序添加缺少的“2012-01-01 00:45:00”以及标准值如“0.00”的最佳方法(cpu密集度较低)是什么?

谢谢.

解决方法:

下面的代码应该填补空白,如果你预计差距将超过30分钟,我可以延长一点

<?PHP
date_default_timezone_set('GMT');

$values = array(
    "2012-01-01 00:15:00" => "0.01",
    "2012-01-01 00:30:00" => "0.34",
    "2012-01-01 01:31:00" => "0.23",
    "2012-01-01 05:31:00" => "0.23",
    "2012-01-02 01:31:00" => "0.23",
);

function process_values($values) {
    $keys = array_keys($values);

    $new_values = array();

    $new_values[$keys[0]] = $values[$keys[0]];

    for($i = 1; $i < count($keys); $i++) {
        $timestamp = strtotime($keys[$i]);

        $minute_difference = ($timestamp - strtotime($keys[$i - 1])) / 60;

        $start_minutes = floor(date('i', strtotime($keys[$i - 1])) / 15) * 15;

        for($k = 1; $k < floor($minute_difference / 15); $k++) {
            $minutes = $start_minutes + $k * 15;

            $formatted_date = date('Y-m-d H:' . str_pad($minutes % 60, 2, '0') . ':00', strtotime($keys[$i - 1]) + floor($minutes / 60) * 3600);

            $new_values[$formatted_date] = '0.00';
        }

        $new_values[$keys[$i]] = $values[$keys[$i]];
    }

    return $new_values;
}

print_r(process_values($values));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐