如何计算您已经连续签到几天
在简单的签到记录表中,如何快速计算您已经连续签到几天?
假如你已经拿到了所有的签到记录日期类似于
<?php $list = [ '2022-08-21', '2022-08-20', '2022-08-19', '2022-08-12' ];
该如何判断呢?
写个函数
<?php function calc_num(array $list = []) { if (empty($list)) { return 0; } $num = 1; $today = date('Y-m-d'); $flag = 0; if (!in_array($today, $list)) { array_unshift($list, $today); $flag = -1; } $count = count($list); for ($i = 1; $i < $count; $i++) { if (strtotime($list[$i - 1]) - strtotime($list[$i]) != 86400) { break; } $num++; } return $num + $flag; }
传入签到的记录日期数组,得到计算结果您已经连续签到xx天.
这里需要明确一点,如果昨天今天都没有签到 则设定为0.
昨天没签到今天签到了,就是连续1天.
昨天签到了今天没签到,也是连续1天.
昨天签到了今天也签到,就是连续2天.
前天签到了昨天签到了,今天没签到,就是连续2天.
前天签到了昨天签到了,今天也签到,就是连续3天.
所以应该把今天也算在内.最后看今天有没有签到如果没有则减1
或者采用另外一种算法
先判断昨天和今天是不是签到了, 如果都没有则立即返回0
<?php function calc_num2(array $list = []) { if (empty($list)) { return 0; } $diff = strtotime(date('Y-m-d')) - strtotime($list[0]); if ($diff != 0 && $diff != 86400) { return 0;//昨天和今天都没签到 则返回0 } $num = 1; $count = count($list); for ($i = 1; $i < $count; $i++) { if (strtotime($list[$i - 1]) - strtotime($list[$i]) != 86400) { break; } $num++; } return $num; }
这个写法稍微好理解点后面就是计算连续的次数自增就行
分类:
算法问题
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2018-08-22 mysql存储引擎ARCHIVE