首页 > 解决方案 > 在数组中添加缺少的月份

问题描述

我有一个 SQL 表,我从中返回月份和视图。询问 :

   function chartData(){
   $q=$this->db->select("DATE_FORMAT(insertTime,'%Y-%M') as Month , count(*) as value")
            ->group_by("DATE_FORMAT(insertTime,'%Y %M')")
            ->get('users');
 return $q->result();
  }

编辑:上面的函数返回这个

    Array
 (
    [0] => stdClass Object
        (
        [Month] => 2018-August
        [value] => 21
 )

    [1] => stdClass Object
 (
        [Month] => 2018-October
        [value] => 3
 )

    [2] => stdClass Object
 (
        [Month] => 2018-September
        [value] => 3
 )

    [3] => stdClass Object
 (
        [Month] => 2019-January
        [value] => 1
 )

    [4] => stdClass Object
 (
        [Month] => 2019-October
        [value] => 1
 )

PHP

$data=$this->users->chartData();
    $keys=array();
    $values=array();
    foreach ($data as $d) {
        array_push($keys, $d->Month);
        array_push($values, $d->value);
    }

    $results['keys']=json_encode($keys);
    $results['values']=json_encode($values);

    print_r($results['keys']);
    // returns ["2018-August","2018-October","2018-September","2019-January","2019-October"]
    print_r($results['values']);
    // returns ["21","3","3","1","1"]

简化形式:

:2018 年 8 月:浏览量:19
:2018 年 10 月:浏览量:1 个
:2019 年 1 月:浏览量:2 个
:2019 年 2 月:浏览量:8个
:2019 年 7 月:浏览量:14

我想要的是如果结果中不存在月份,则使用 views=0 插入缺少的月份:

月份:2018 年 8 月:查看次数:19 个
:2018 年 9 月:查看次数:0 - 这不在表格中。我分配给 0个
:2018 年 10 月:查看次数:1 个
:2018 年 11 月:查看次数:0 - 这不在表格中。我分配给 0
:2018 年 12 月:查看次数:0 - 这不在表格中。我分配给 0

我遵循了这个答案,这是我想要的解决方案,但需要多年。如果您看到这个答案,您将找不到 year 所以很容易通过创建 values=0 的月份数组来操作它,然后用数据库值
LINK 覆盖它:查询我们没有卖出任何东西的缺失月份?

标签: phpmysqlarrays

解决方案


也许像这样?
我从键的开头循环到键的结尾作为 strtotime。

我使用 array_search 来查看是否在值中找到它,如果不添加零值,则添加值。

$keys = ["2018-August","2018-October","2018-September","2019-January","2019-October"];
$values = [21,3,3,1,1];

For($i= strtotime($keys[0]); $i<=strtotime(end($keys)); $i+=86400*31){
    $search = array_search(date("Y-F", $i), $keys);
    if($search !== false){
        $new[$keys[$search]] = $values[$search];
    }else{
        $new[date("Y-F", $i)] =0;
    }
}
$new[end($keys)] = end($values); //add last item since I loop between the dates
Var_dump($new);

输出:

array(15) {
  ["2018-August"]=>
  int(21)
  ["2018-September"]=>
  int(3)
  ["2018-October"]=>
  int(3)
  ["2018-November"]=>
  int(0)
  ["2018-December"]=>
  int(0)
  ["2019-January"]=>
  int(1)
  ["2019-February"]=>
  int(0)
  ["2019-March"]=>
  int(0)
  ["2019-April"]=>
  int(0)
  ["2019-May"]=>
  int(0)
  ["2019-June"]=>
  int(0)
  ["2019-July"]=>
  int(0)
  ["2019-August"]=>
  int(0)
  ["2019-September"]=>
  int(0)
  ["2019-October"]=>
  int(1)
}

推荐阅读