>백엔드 개발 >PHP 튜토리얼 >PHP_php 실력을 바탕으로 기간 한정 세일 기간 동안 상품이 바쁜 척하는 효과를 실감해보세요.

PHP_php 실력을 바탕으로 기간 한정 세일 기간 동안 상품이 바쁜 척하는 효과를 실감해보세요.

WBOY
WBOY원래의
2016-05-16 20:06:33908검색

최근에는 급매 상품 진열 기능에 관한 프로젝트를 진행하고 있습니다. 예를 들어, 당사 웹사이트의 트래픽이 많고 몇 초 안에 수천 명의 사용자가 귀하의 제품을 동시에 클릭하면 "너무 많은 사람들이 구매를 서두르고 있습니다"라는 메시지가 나타나고 시스템이 바빠집니다. 🎜>

하지만 대부분의 웹사이트는 그다지 훌륭하지 않습니다. 사용자가 제품이 매우 인기가 있고 "시스템 사용 중" 효과가 항상 표시되도록 하려면 "바쁜 척"하는 프로그램을 만들어야 합니다. (타오바오를 제외한 다른 사이트는 너무 바쁘다고 생각하지 마세요. 일부러 잡지 않고는 살 수 없다는 느낌을 주게 하는 것일 뿐입니다. 이해해 주세요)

본 글은 규칙을 정한 것이며, 제 생각에 따라 확장하셔도 됩니다.

1. 누구나 제품 구매 링크를 클릭할 수 있습니다.


2. 사용자에게 "대기, 바쁜 상품"을 경험할 기회를 70% 제공하고 싶습니다

이 글은 PHP 코드를 사용하여 구현되었습니다. 다른 언어와 동일하게 변경하세요.

우선 초등학교 때 배운 지식을 활용해 생각해 보겠습니다.

1. 공이 10개 있다면 빨간 공은 3개, 농구공은 7개입니다. 가방에 넣으세요. 무작위로 섞어서 손을 넣어서 만져보게 하면 농구공이 닿을 확률은 얼마나 될까요? 아무래도 70%인 것 같아요

이번에 친구에게 이 요구사항을 보여줬어요. 그가 내린 대답은 이렇습니다.

$arr=array("빨간색","빨간색","빨간색","파란색","파란색","파란색","파란색","파란색","파란색","파란색");


그런 다음 echo $arr[rand(0,9)];


그러자 단 두 문장이면 끝났다고 하더군요.

이 접근 방식은 실제로 매우 현명합니다. 그런데 이 작은 친구는 아주 중요한 점을 무시했습니다

2. 두 번째 사람이 만지면 어떻게 되나요? 여기서 한 가지 주의할 점은 두 번째 사람이 터치하게 되면 이 10개의 공을 채워야 한다는 것입니다(여전히 빨간 공 3개, 농구공 7개)

그리고 가장 중요한 것은 "무작위로, 부담없이" 계속해서 섞는 것입니다. 이런 식으로 두 번째 사람이 농구공을 만질 확률은 여전히 ​​70%가 됩니다.

위의 절차는 분명히 무시합니다. 계속해서 "무작위로" 혼합합니다. 모두가 처음 세 개의 빨간색과 마지막 일곱 개의 파란색을 눌러 공을 터치하면 됩니다. 그러면 PHP의 rand 함수는 농구공이 70%임을 보장할 수 없습니다.

이렇게 말하면 많은 마스터들이 베이지안, 행렬 및 기타 단어와 같은 다양한 고급 알고리즘을 고안하고 싶어합니다. 그러한 전자 상거래 기능에 그렇게 복잡한 계산이 필요한 경우, 귀하의 상사는 귀하가 이 기능을 완료하는 데 너무 많은 시간을 소비하는 것에 동의하지 않을 것이라고 믿습니다.

다음으로 간단하면서도 정확한 알고리즘을 공개합니다. 우리의 목표는 PHP의 간단한 함수를 사용하여 농구공에 닿을 확률을 가능한 한 70%에 가깝게 만드는 것입니다.

1단계: $arr=array("red","red","red","blue","blue","blue","blue","blue", " blue","blue"); 이것이 있어야 합니다. 이것은 초기화된 빨간 공 3개와 농구공 7개입니다

2단계: 무작위로 혼합합니다.

위 배열에는 10개의 요소가 있습니다. 두 개의 공을 무작위로 교환할 수 있습니다.


먼저 swap 함수를 작성하세요(이 함수를 이해하지 못한다면 기본을 익혀야 합니다)


function swap($i,$j,$arr)
  {
    $tmp=$arr[$i];
    $arr[$i]=$arr[$j];
    $arr[$j]=$tmp;
    return $arr;
  }
이 함수는 두 개의 난수를 입력하고 배열의 시퀀스 번호를 교환하여 구현됩니다.

3단계: 교환 알고리즘을 최적화합니다.

위의 교환 함수와 입력된 랜덤 매개변수로 인해 빨간 공이 빨간 공으로 교환되거나, 농구공이 농구공으로 교환됩니다. 그러나 "진짜" 믹싱은 이루어지지 않습니다

따라서 모든 교환이 빨간 공과 농구공의 무작위 교환이 되도록 보장하는 보충 기능을 작성해야 합니다.

 function getRange($arr,$v)
  {
    $ret=array();
    for($i=0;$i<count($arr);$i++)
    {
      if($arr[$i]==$v)
      {
         $ret[]=$i;
      }
    }
     return $ret[rand(0,count($ret)-1)];
  }
이 함수의 기능은 10개의 공 중에서 빨간 공이나 농구공을 찾은 다음 각각의 현재 일련번호를 꺼내고, 그런 다음 Rand 함수를 사용하여 농구공이나 빨간 공의 일련번호를 무작위로 선택하는 것입니다.

여기를 살펴보세요:


$i=getRange($arr,”red”); //이 방법으로 임의의 빨간 공의 일련번호를 얻을 수 있습니다

$j=getRange($arr,”blue”); //임의의 농구공 일련번호를 알아낼 수 있습니다

4단계: 더 중요합니다.

무작위로 혼합 시작

 for($num=0;$num<10;$num++)
     {
       
       $i=getRange($arr,”red”);  
             $j=getRange($arr,”blue”); 
       
       $arr=swap($i,$j,$arr);
      
      // echo implode(“,”, $arr).”|”.$i.”|”.$j.”<br/>”; //这个语句可以看一下输出,混合过后的排列,是否每次都不一样
     }

여기서 주목해야 할 중요한 점은 $num<10입니다. 나를 대신해 10번 믹싱해주세요. 이는 큰 손을 사용하여 가방을 10번 휘젓는 것과 같습니다. 이론적으로는 더 많이 저을수록 무작위성이 더 강해집니다. 여기서는 실제로 10번이면 충분합니다.

4단계가 완료된 후 나오는 $arr는 빨간 공과 농구공이 혼합된 형태입니다.

5단계: rand 함수 다시 호출

에코 $arr[rand(0,9)];

내용이 파란색이면 바로 나가세요("바빠요. 귀찮게 하지 마세요")
빨간색이면 프로그램이 구매 프로세스를 계속 실행하도록 합니다.

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