PHP计算时间,统计图表

来源:互联网 发布:彩票双色球大赢家软件 编辑:程序博客网 时间:2024/06/07 01:21

前言
因为公司有多个APP,需求计算出每个APP的安装量,在图表中显示出来
首先查出数据,这里借用下ThinkPHP5.0的语法

$data   = db("table") -> select();$start = current($data)["add_time"];//需要查询的开始时间$end   = end($data)["add_time"];//需要查询的结束时间$difference = ($start-$end)/86400;//计算天数//如果是0天或者不是整数,为浮点数就加一if($difference == 0 || !is_int($difference)){    $difference = $difference+1;}//注意你的时间如果是时间戳,便转为Y-m-d的格式,这里区分年,月,日函数    $androidNum     = 0;//计算android下载总量    $iosNum         = 0;//计算ios下载总量    foreach ($data as $key => &$value) {        $value["add_time"] = date("Y-m-d", $value["add_time"]);//我这里是时间戳,转为Y-m-d格式        if($value["system"] == "android"){            $androidNum++;        }        if($value["system"] == "IOS"){            $iosNum++;        }    }$info = yearMonthDay($data,$difference);//转换函数,第一个参数为数据,第二个参数为开始时间与结束时间相差天数

下面的便是函数了

 function yearMonthDay($data,$difference){    //判断数据是否正确    if(!is_array($data) || empty($difference)) {       return json(["status" => "1", "msg" => "请传入正确的参数", "data" => ""]);    }  //设置一个空数组$info存储数据  $info  = array();  //遍历$data  foreach($data as $key => $value){      //判断$difference为多少天,并取出时间值      //小于十天就以天为单位(这里查询十条数据,所以就以月、日*10)      if($difference<=10){          $current = $data[$key]["add_time"];      }elseif($difference>10 && $difference<=300){          $current = substr($data[$key]["add_time"],0, 7);//按月份计算,截取2015-10-01的前7位,也就是年月相同      }elseif($difference>300){          $current = $current = substr($data[$key]["add_time"],0, 4);//按年份计算      }else{          $current = "";      }      //再次进行循环      foreach($data as $k => $v){          //取出这层循环的时间值          if($difference>10 && $difference<=300){            $next = substr($data[$k]["add_time"],0, 7);          }elseif($difference>300){            $next = substr($data[$k]["add_time"],0, 4);          }elseif($difference<=10){            $next = $data[$k]["add_time"];          }else{            $next = "";          }          //拿出外层循环出的一条数据和内层循环的所有数据进行比较          if($current == $next){             //如果相同,就放到一个数组中去            $info[$key][]  = $v;            unset($data[$k]);          }else{              //否则跳出循环              //因为最后一条数据,如果都不相同的话,会直接跳出循环,所以我们判断如果只有一条数据,就存下它              if(count($data) == 1){                $info[][] = $v;              }              break;         }      }  }  //$info是把所有数据按照年、月、日重新排序了一下,接下来我们统计下载量  //$data现在已经用不到了,所以我初始化一下他,就相当于重新定义一个数组;  $data  = array();  //循环新数组$info  foreach($info as $key => $value){      //因为上边只是排序了数组,并没有改变数组,所以我们还要判断一下      if($difference>10 && $difference<=300){          $data[$key]["year"]   = substr(current($value)["add_time"], 0, 7);      }elseif($difference>300){          $data[$key]["year"]   = substr(current($value)["add_time"], 0, 4);      }else{          $data[$key]["year"]   = current($value)["add_time"];      }      //计算出每个时间段的总数量      $data[$key]["value"]       = count($value);      //计算android与ios每个时间段的下载数量      foreach ($value as $v){          if($v["system"] == "android"){              $android[] = $v;          }          if($v["system"] == "IOS"){              $IOS[] = $v;          }      }      $data[$key]["android"]  = count($android);      $data[$key]["ios"]       = count($IOS);    }  return $data;}

返回数据例子:

array (size=3)0 =>   array (size=4)    'year' => string '2019-10' (length=7)    'value' => int 1    'android' => int 0    'ios' => int 11 =>   array (size=4)    'year' => string '2018-07' (length=7)    'value' => int 1    'android' => int 0    'ios' => int 12 =>   array (size=4)    'year' => string '2018-06' (length=7)    'value' => int 1    'android' => int 0    'ios' => int 1
原创粉丝点击