出题:现有测试数据如下,要求实现如下图中的效果:

  1. array(4) {
  2. [0] => array(6) {
  3. ["visit_id"] => int(127)
  4. ["goods_id"] => int(16)
  5. ["visittime"] => int(1494399935)
  6. ["goods_name"] => string(53) "OPPO R9s 全网通4G+64G 双卡双待手机 玫瑰金"
  7. ["shop_price"] => string(6) "500.00"
  8. }
  9. [1] => array(6) {
  10. ["visit_id"] => int(124)
  11. ["goods_id"] => int(13)
  12. ["visittime"] => int(1494399921)
  13. ["goods_name"] => string(76) "SIEMENS/西门子 KA92NV09TI双开门家用对开门电冰箱变频旗舰款"
  14. ["shop_price"] => string(7) "4000.00"
  15. }
  16. [2] => array(6) {
  17. ["visit_id"] => int(123)
  18. ["goods_id"] => int(27)
  19. ["visittime"] => int(1494399903)
  20. ["goods_name"] => string(85) "爱他美白金版Aptamil 幼儿配方奶粉3段(12-36个月适用)900g(欧洲进口)"
  21. ["shop_price"] => string(6) "329.00"
  22. }
  23. [3] => array(6) {
  24. ["visit_id"] => int(120)
  25. ["goods_id"] => int(26)
  26. ["visittime"] => int(1494224263)
  27. ["goods_name"] => string(21) "欢乐谷免票一张"
  28. ["shop_price"] => string(5) "50.00"
  29. }
  30. }

还没实现之前我想这个代码不知道要O(n)呢还是更高的复杂度才能实现,细想一下,其实php的数组底层就是哈希实现的,如何简单利用这个特性使复杂度降到O(1)呢?

show me the code

  1. /* 浏览记录按日期分组 */
  2. function groupVisit($visit)
  3. {
  4. $curyear = date('Y');
  5. $visit_list = [];
  6. foreach ($visit as $v) {
  7. if ($curyear == date('Y', $v['visittime'])) {
  8. $date = date('m月d日', $v['visittime']);
  9. } else {
  10. $date = date('Y年m月d日', $v['visittime']);
  11. }
  12. $visit_list[$date][] = $v;
  13. }
  14. return $visit_list;
  15. }

说明:入参 $visit 就是上面一开始的测试数据,函数中还对用户体验做了一些优化,比如,你的浏览记录中总是显示出今年的年份,是不是感觉有点冗余,所以如果是本年份的话,年份就要隐藏起来,其他年份还是照样显示出来。不然代码会更加简洁,还是忍不住打出来,如下:

  1. /* 简化版的函数 */
  2. function groupVisit($visit)
  3. {
  4. $visit_list = [];
  5. foreach ($visit as $v) {
  6. $visit_list[date('Y年m月d日', $v['visittime'])][] = $v;
  7. }
  8. return $visit_list;
  9. }

好,上面的测试数据经过该函数之后,再把返回值打印出来,有:

  1. array(2) {
  2. ["05月10日"] => array(3) {
  3. [0] => array(6) {
  4. ["visit_id"] => int(127)
  5. ["goods_id"] => int(16)
  6. ["visittime"] => int(1494399935)
  7. ["goods_name"] => string(53) "OPPO R9s 全网通4G+64G 双卡双待手机 玫瑰金"
  8. ["shop_price"] => string(6) "500.00"
  9. }
  10. [1] => array(6) {
  11. ["visit_id"] => int(124)
  12. ["goods_id"] => int(13)
  13. ["visittime"] => int(1494399921)
  14. ["goods_name"] => string(76) "SIEMENS/西门子 KA92NV09TI双开门家用对开门电冰箱变频旗舰款"
  15. ["shop_price"] => string(7) "4000.00"
  16. }
  17. [2] => array(6) {
  18. ["visit_id"] => int(123)
  19. ["goods_id"] => int(27)
  20. ["visittime"] => int(1494399903)
  21. ["goods_name"] => string(85) "爱他美白金版Aptamil 幼儿配方奶粉3段(12-36个月适用)900g(欧洲进口)"
  22. ["shop_price"] => string(6) "329.00"
  23. }
  24. }
  25. ["05月08日"] => array(1) {
  26. [0] => array(6) {
  27. ["visit_id"] => int(120)
  28. ["goods_id"] => int(26)
  29. ["visittime"] => int(1494224263)
  30. ["goods_name"] => string(21) "欢乐谷免票一张"
  31. ["shop_price"] => string(5) "50.00"
  32. }
  33. }
  34. }

对的,这正是我想要的效果。

思考:java或C++等其他后台语言要怎么简洁地实现这个效果呢?用map库?python用dictionary?

-end-

php实现‘浏览记录’按日期分组的更多相关文章

  1. SQL Server 根据日期分组、 根据时间段分组(每三个小时一组)

    所用数据表: 一.根据日期分组 1. 使用convert() 函数方式 --根据年月 ),CreatTime,)日期,COUNT(*) 次数,sum(Money)总数 from Orders ),Cr ...

  2. SQL 统计两个表的数据,按同一日期分组

    思路:把两个表的数据按日期整合到临时表在按日期分组,求和. 例子: SELECT t.dateTime AS '日期',SUM(t.money) AS '表1利息',SUM(t.interest) A ...

  3. Cookie实现商品浏览记录--方式二:JS实现

    使用Cookie实现商品浏览记录:方式二:JS方法实现cookie的获取以及写入.当某一个产品被点击时,触发JS方法.利用JS方法判断一下,此产品是否在浏览记录中.如果不存在,则将产品ID加入到coo ...

  4. 使用cookie实现打印浏览记录的功能

    可以用cookie知识来实现打印浏览记录.这里面用到的思路是将浏览记录以字符串的方式保存到cookie中,当浏览记录增加时,再将其转化为数组. $uri=$_SERVER['REQUEST_URI'] ...

  5. (JS实现顾客商品浏览记录以及购物车)Cookie的保存与删除

    //JS实现顾客浏览商品的记录以及实现购物车的功能function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.s ...

  6. Java遇见HTML——JSP篇之商品浏览记录的实现

    一.项目总体介绍 使用Cookie实现商品浏览记录. 要实现这个程序采取的是Model1(Jsp+JavaBean)架构实现,具体步骤: 首先要有个数据库,商品表,操作数据库的一个类DBHelper类 ...

  7. 使用Cookie保存商品浏览记录

    数据流程:页面上是商品列表,点击<a href="productServlet">商品名</a> ==>跳转到自定义的servlet中进行处理,先得到 ...

  8. js记录用户在网站的浏览记录和停留时间

    by weber开发者 from http://weber.pub/ 本文地址: http://weber.pub/js记录用户行为浏览记录和停留时间/163.html 问题 公司想统计一个用户从进入 ...

  9. Cookie中图片的浏览记录与cookie读取servle时路径的设置(文字描述)

    public class ShowServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpSer ...

随机推荐

  1. MSDN官方数据库开发群

    QQ群1:43563009 创建人:中国风(Roy_88) 创建时间:2007-07-21 当前人数:326人 QQ群2:27156079 创建人: fcuandy 创建时间:2008-03-20 当 ...

  2. css 多行超长点点点

    超长?不是很好吗?什么?不好?有什么坏处吗?会使人想哭的! 这里来说下,超长点点点的处理: 一行超长点点点,这个很多都会吧! text-overflow: ellipsis; white-space: ...

  3. Tcl与Design Compiler (十)——其他的时序约束选项(一)

    本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 之前讲了基本的时序路径 ...

  4. 推荐virtualBox虚拟机及安装使用的注意事项

    推荐选择virtualBox虚拟机 选择vbox是因为,本人觉得使用起来比VMware要方便. 简要说明: 本人自学前端开发,对于linux了解很少,直接上手真实的linux环境会很不适应,所以选择了 ...

  5. WPF中的RichTextBox

    原文链接:http://blog.csdn.net/wuzhengqing1/article/details/7010902 取出richTextBox里面的内容 第一种方法:将richTextBox ...

  6. 收集下shell使用笔记

    让进程转入后台: Ctrl + z 将进程转到前台: fg 产生随机的十六进制数,其中n是字符数: openssl rand -hex n 截取前5个字符: ${variable::} 一次创建多个目 ...

  7. SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除临时表(drop table #tableName)吗?

    本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时 ...

  8. Java中的socket通信

    socket又称套接字,应用程序通常通过"套接字"向网络发出请求或应答网络请求 建立过程:服务器监听-客户端发出请求-建立链接-通信 特点:1.基于tcp链接,数据传输有保障,2. ...

  9. 原生态JS实现banner图的常用所有功能

    虽然,用jQuery实现banner图的各种效果十分简单快捷,但是我今天用css+js代码实现了几个banner图的常用功能,效果还不错. 此次,主要想实现以下功能: 1. banner图循环不间断切 ...

  10. 关于使用ModelSim中编写testbench模板问题

    对于初学者来说写Testbench测试文件还是比较困难的,但Modelsim和quartus ii都提供了模板,下面就如何使用Modelsim提供的模板进行操作. Modelsim提供了很多Testb ...