php 联续7天签到算法
要求:每天签到送积分,第一天1积分,第二天2积分_..第七天7积分(中间不能问隔,如有从要第一天开始) 7天为一个同期
在日历中显示联续7天签到与积分情况
mysql:
tp5 php
<?php namespace app\api\controller; use app\api\controller\Common; use think\Db; class Sign extends Common { //获取已签到日期 public function getList(){ $param = input('post.'); //$userCoo = $this->unLockCoo($param['userCoo']); //$uid = $userCoo['id']; $uid = 6; //用户id //不包含今天 $sign = Db::name('sign')->where([['uid','=',$uid],['date','<',date('Ymd')]])->order('date desc')->field('date')->limit(7)->select(); //已连续签到几天 $count = $this->countData($sign); //已连续签到日期 $dataArae = array(); $key = 1; for($i=$count;$i>0;$i--){ $dataArae[] = ['date'=>date("Ymd",mktime(0,0,0,date('m'),date('d')-$i,date('Y'))),'sta'=>1,'text'=>'+'.$key]; $key++; } //7天内未签到日期 $count = 7-$count; for($i=0;$i<$count;$i++){ $dataArae[] = ['date'=>date("Ymd",mktime(0,0,0,date('m'),date('d')+$i,date('Y'))),'sta'=>0,'text'=>'+'.$key]; $key++; } debug($dataArae); //return json($list); } //连续签到日期 public function countData($sign){ $count = 0; //循环时间数据 foreach ($sign as $k=>$v){ $date = date("Ymd",mktime(0,0,0,date('m'),date('d')-($k+1),date('Y')));//日期递减一天,从昨天开始 if($v['date'] == $date){//判断当前时间是否一直 $count = $count+1; }else{//时间不一致结束循环 break; } } return $count; } //提交签到 public function submit(){ $param = input('post.'); $userCoo = $this->unLockCoo($param['userCoo']); $uid = $userCoo['id']; $date = date("Ymd"); $check = Db::name('sign')->where([['uid','=',$uid],['date','=',$date]])->find(); if($check){ return json(['sta'=>0,'msg'=>'您今天已经签到过了']); } Db::name('sign')->insert(['uid'=>$uid,'date'=>$date]); return json(['sta'=>1,'msg'=>'签到成功']); } }
结果