php - 在数组中添加缺少的月份
问题描述
我有一个 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 覆盖它:查询我们没有卖出任何东西的缺失月份?
解决方案
也许像这样?
我从键的开头循环到键的结尾作为 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)
}
推荐阅读
- kibana - 合并Vega中的重叠线?
- java - 如何在java中绘制外摆线?
- java - Socket Client-Server:无法从服务器接收消息
- c++ - 调试混合 C 和 CPP 程序的 makefile 选项是什么?
- node.js - Razorpay 如何使用 firebase 调用函数生成 orderId?
- sum - DAX 函数计算三个滚动年份的数字总和
- json - 数据库模式嵌套数组
- sql - 如何在sql中实现子类型
- c - 立即扫描未知数量的整数而不使用数组和 printf
- xcode - 更新了 React Native,在 Podfile 中找不到“boost”依赖项