我有一个应用程序,可以在两个日期之间从mysql中提取一些信息,并返回一个关联数组。我正在使用此信息生成图形,但是数据库中没有可返回的信息的日期缺少日期。我无法在mysql端解决此问题,因为我仅具有对数据库的只读访问权限。

我的数据库方法检索如下的关联数组:

[0] => Array
        (
            [number_of_calls] => 151
            [total_call_time] => 00:01:30
            [average_call] => 00:02:00
            [DATE(calldate)] => 2016-03-18
            [direction] => outbound
        )


我希望做的是从我的表单中创建一个日期范围,如下所示:

    //create data range array
    $begin = new DateTime( $datefrom );
    $end = new DateTime( $dateto );
    $end = $end->modify( '+1 day' );
    $interval = new DateInterval('P1D');
    $daterange = new DatePeriod($begin, $interval ,$end);


然后使用foreach循环遍历daterange的选定日期,并从日期匹配的关联数组中拉出值,如果没有插入,则插入零值,如下所示:

        [number_of_calls] => 0
        [total_call_time] => 00:00:00
        [average_call] => 00:00:00


我还需要最终数组按日期顺序结束。有人可以帮我吗?

最佳答案

您可以将$result数组转换为使用DATE(calldate)作为键。

$keys = [];
foreach ($result as $item) {
    $keys[] = $item['DATE(calldate)'];
}
$result = array_combine($keys, $result);


您的数组将如下所示:

[2016-03-18] => Array
    (
        [number_of_calls] => 151
        [total_call_time] => 00:01:30
        [average_call] => 00:02:00
        [DATE(calldate)] => 2016-03-18
        [direction] => outbound
    )


您可以检查日期是否通过简单的命令显示:

$key = $datevalue->format('Y-m-d');
if (isset($result[$key])) {
    // date exists, use it
} else {
    // date not exists, create empty value
}

关于php - 为foreach循环中的缺失项创建零值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36711910/

10-11 06:03