이 글에서는 주로 기록 검색 및 날짜별 그룹화 기능을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
기존 테스트 데이터는 다음과 같습니다. 효과는 아래 그림과 같습니다.
구현되기 전에 저는 이 코드를 사용하는 방법을 몰랐습니다. (n)은 더 높은 복잡성을 통해서만 달성할 수 있습니다. 자세히 생각해 보면 실제로 PHP 배열의 맨 아래 계층은 이 기능을 사용하여 간단하게 줄이는 방법입니다. O(1)의 복잡성?
코드를 보여주세요:
|
还没实现之前我想这个代码不知道要O(n)呢还是更高的复杂度才能实现,细想一下,其实php的数组底层就是哈希实现的,如何简单利用这个特性使复杂度降到O(1)呢?
show me the code:
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" } } |
说明:入参 $visit 就是上面一开始的测试数据,函数中还对用户体验做了一些优化,比如,你的浏览记录中总是显示出今年的年份,是不是感觉有点冗余,所以如果是本年份的话,年份就要隐藏起来,其他年份还是照样显示出来。不然代码会更加简洁。
好了上面的测试数据经过该函数之后,再把返回值打印出来,有:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/* 浏览记录按日期分组 */ 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; } |
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" } } }
2🎜
3🎜
4🎜
5🎜
6🎜
7🎜
8🎜
9🎜
10🎜
11🎜
12🎜
13🎜
14🎜
15🎜
16🎜
17🎜
18🎜
19🎜
20🎜
21🎜
22🎜
23🎜
24🎜 25🎜
26🎜
27🎜
28 🎜
29🎜
30🎜
31🎜
32🎜
33🎜
34🎜🎜
🎜🎜🎜🎜🎜🎜🎜🎜🎜네, 이게 바로 제가 원하는 효과입니다. 🎜🎜관련 권장 사항: 🎜🎜🎜문자 깨짐을 방지하기 위해 PHP에서 중국어 문자열을 바꾸는 방법🎜🎜🎜🎜🎜위 내용은 PHP는 검색 기록을 구현하고 날짜별로 그룹화합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!