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

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

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

show me the code

/* 浏览记录按日期分组 */
function groupVisit($visit)
{
    $curyear = date('Y');
    $visit_list = [];
    foreach ($visit as $v) {
        if ($curyear == date('Y', $v['visittime'])) {
            $date = date('m月d日', $v['visittime']);
        } else {
            $date = date('Y年m月d日', $v['visittime']);
        }
        $visit_list[$date][] = $v;
    }
    return $visit_list;
}

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

/* 简化版的函数 */
function groupVisit($visit)
{
    $visit_list = [];
    foreach ($visit as $v) {
        $visit_list[date('Y年m月d日', $v['visittime'])][] = $v;
    }
    return $visit_list;
}

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

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

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

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

-end-

最新文章

  1. C# DateTime日期格式化
  2. 复制远程共享文件夹内容到本地(python脚本实例)
  3. django操作数据库之查询F,Q操作 和 seach搜索功能
  4. 实现简单ThreadPool
  5. 七、Android学习笔记_JNI hello world
  6. 十个拥有丰富UI组件的JS开发框架
  7. codevs 1243 网络提速
  8. Developing your first FNC custom control
  9. ubuntu上搭建工作环境
  10. HTML之前端操作div标签布局
  11. python 爬虫入门----案例爬取上海租房图片
  12. 微信小程序基础之表单Form的使用
  13. 【JavaScript】轮播图
  14. Linux之ansible 常用模块
  15. Ocelot简易教程(一)之Ocelot是什么
  16. ASP.Net Core2.1中的HttpClientFactory系列二:集成Polly处理瞬态故障
  17. Uninstall registry
  18. [转]awsome-python
  19. Lua 语言环境安装
  20. The type javax.swing.JComponent cannot be resolved. It is indirectly referenced from required .class files

热门文章

  1. centos6.7搭建DHCP服务器
  2. iOS开发之UIPopoverController
  3. Apache Mina入门实例
  4. 接口测试培训:HTTP协议基础
  5. 性能调优之MYSQL高并发优化
  6. jquery处理checkbox(复选框)是否被选中
  7. Struts2基础学习(三)—Result和数据封装
  8. 在ElasticSearch中使用 IK 中文分词插件
  9. 详细了解 int? 类型
  10. User Browsing Model简介