oracle 导出指定月份数据_PHP预先生成array指定条数数据(包含天和月份)

PHP预先生成array指定条数数据(包含天和月份),适用于提供给前端排行榜,数据销量图等数据,具体思路如下:

1.将日期作为key,预先生成的array作为value,通过php中array_combine()函数进行合并,暂时称为$pre_array;

2.将数据库中查询出来的数据$search_array和$pre_array进行array_replace_recursive($pre_array, $search_array)替换。

第一点实现如下:

/** * 预先生成 limit 天的数据 * * @param int $limit 多少天 * @param bool $is_year 是否全年 * @param bool $is_today 是否包含当天 * * @return array|false */protected function pre_settles($limit = 15, $is_year = false, $is_today = false){ if (!$is_year) { if ($is_today) { $date_arr = $this->date_rang(date('Y-m-d', time()), date('Y-m-d', time() - (($limit - 1) * 86400))); } else { $date_arr = $this->date_rang(date('Y-m-d', time() - 86400), date('Y-m-d', time() - ($limit * 86400))); } // 预先设定这15天数据都是0,下面进行数据替换 $val_arr = array_fill(0, $limit, 0); $pre_settles = array_combine($date_arr, $val_arr); } else { $year = date('Y', time()); $date = []; for ($j = 1; $j <= 12; $j++) { if ($j < 10) { $date[] = $year . "-0" . $j; } else { $date[] = $year . "-" . $j; } } // 预先设定这12个月的数据都是0 $val_arr = array_fill(0, 12, 0); $pre_settles = array_combine($date, $val_arr); } return $pre_settles;}

date_rang()函数如下:

/** * 将2个日期之间的日期存到数组里面 * * @param $start_date * @param $end_date * * @return array */protected function date_rang($start_date, $end_date){ return array_map(function ($n) { return date('Y-m-d', $n); }, range(strtotime($start_date), strtotime($end_date), 24 * 3600) );}

$limit 指定条数 例如:15

$is_year 是否月份 例如:false

$is_day 是否包含当天 例如: false

例子如下:

$pre_array= $this->pre_settles(5);

$pre_array会是这种格式:['2019-09-05' => 0, '2019-09-04'=>0, '2019-09-03' => 0, '2019-09-02' => 0, '2019-09-01' => 0];

$search_array从数据库中筛选出来的数据:['2019-09-05' => 5, '2019-09-03' => 4];

通过array_replace_recursive($pre_array, $search_array)得到如下数组:

['2019-09-05' => 5, '2019-09-04'=>0, '2019-09-03' => 4, '2019-09-02' => 0, '2019-09-01' => 0];

这个数据可以传递给前端数据趋势图进行展示:

a3b96aebf8d032c4bc5d30609868a87c.png

销量趋势图7天(不包含当天)

f127948a6360b6fe54d9057086ab78f9.png

销量趋势图(全年)

对于全年的数据只需要$is_year传入true即可

$search_array从数据库中筛选出来的数据:['2019-09' => 25, '2019-08' => 24];

对于包含当天的只需要$is_day传入true即可.

改方法很适用,希望可以帮助到大家,大家也可以和我多加讨论一下~

b39ef6b8a8ad8168ad3e64e2593c5f84.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值