>  기사  >  백엔드 개발  >  PHP는 검색 기록을 구현하고 날짜별로 그룹화합니다.

PHP는 검색 기록을 구현하고 날짜별로 그룹화합니다.

不言
不言원래의
2018-04-16 14:12:391385검색

이 글에서는 주로 기록 검색 및 날짜별 그룹화 기능을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

기존 테스트 데이터는 다음과 같습니다. 효과는 아래 그림과 같습니다.




구현되기 전에 저는 이 코드를 사용하는 방법을 몰랐습니다. (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"
 } 
 } 
}


🎜🎜참고: 입력 매개변수 $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🎜🎜

🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜네, 이게 바로 제가 원하는 효과입니다. 🎜🎜관련 권장 사항: 🎜🎜🎜문자 깨짐을 방지하기 위해 PHP에서 중국어 문자열을 바꾸는 방법🎜🎜🎜🎜🎜

위 내용은 PHP는 검색 기록을 구현하고 날짜별로 그룹화합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.