php - 为 foreach 循环中缺失的项目创建零值

标签 php mysql arrays

我有一个应用程序,它从两个日期之间的 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 循环迭代日期范围的选定日期,并从日期匹配的关联数组中提取值,如果不匹配则插入零值,如下所示:

        [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/

相关文章:

PHP函数标志,怎么样?

php - 当数据库中有两个日期时,如何按日期 DESC 查询 ORDER?

mysql - 在 Mysql 中找不到文件错误以及如何将 txt 文件加载到表中

java - 如何重用取决于执行结果的PreparedStatement

c - 输入的值未写入数组

python - numpy 数组中的索引,其中切片在另一个数组中

php - 有没有更好的方法在 mysql 和 PHP 中查询这个

php - 如何在我的网站上嵌入 Facebook 视频

PHP/MySQL : How to create a comment section in your website

c - 运行代码恰好一秒钟