《PHP編程:基于PHP實現假裝商品限時搶購繁忙的效果》要點:
本文介紹了PHP編程:基于PHP實現假裝商品限時搶購繁忙的效果,希望對您有用。如果有疑問,可以聯系我們。
PHP應用最近要做一個項目,有關商品顯示搶購的功能.好比我們的網站很帶流量,那么成千上萬的用戶在幾秒內同時點你的商品,確實會出現“搶購人數過多,會提示,系統繁忙.
PHP應用??? 但是呢,大部分網站然而并沒有這么牛叉.為了讓用戶感受到商品很搶手,動不動就提示”系統繁忙“的效果,我們必要做一個程序來”假裝很繁忙“. (除了淘寶,大家不要以為其他網站真的很繁忙哦,只不過人家是故意讓你覺得不搶就買不到,求懂)
PHP應用本文來設定一個規則,大家可以根據我的思路擴展即可.
PHP應用??? 1、商品購買鏈接,每個人都可以點.
PHP應用??? 2、我們要讓用戶有70%的可能性呈現“排隊中,商品繁忙”
PHP應用??? 本文用 php代碼實現.其他語言一樣,改改.
PHP應用首先我們用小學學到的知識想一下:
PHP應用??? 1、 如果有10個球,其中3個紅球,7個籃球.放在袋子里.隨便胡亂的混合一下,讓你用手伸進去摸,那么摸到籃球的幾率是多少?顯然,是70%
PHP應用之前我把這個需求給了一個小伙伴看.他給出的答案如下:
PHP應用???? $arr=array(“red”,”red”,”red”,”blue”,”blue”,”blue”,”blue”,”blue”,”blue”,”blue”);
PHP應用???? 然后 echo $arr[rand(0,9)];
PHP應用???? 然后告訴我,他兩句話就搞定了.
PHP應用這個做法其實已經蠻聰明了.但是這位小伙伴忽略了很重要的一點
PHP應用?2、如果第二個人來摸呢? 這里有個注意點,如果第二個人來摸,那么一定要把這10個球補滿(依然是3個紅球,7個籃球)
PHP應用? 然后最重要的,還要繼續“胡亂的、隨便的”混合一下.這樣,第二個人來摸到籃球的幾率才會依然是70%.
PHP應用??? 上面的程序明顯忽略了:繼續“胡亂的、隨便的”混合一下. 如果每個人都按這個 前三個紅后七個藍 來摸球.那么php的rand函數不克不及保證籃球是70%.
PHP應用??? 說到這,很多大神要拿出各種高級算法,譬如啥貝葉斯、矩陣之類的字眼出來.如果這么一個電商功能要用這么復雜的運算,我相信你的老板不會同意你花這么多時間來完成這個功能吧.
PHP應用? 接下來,我放出一種簡單,但也不失精準性的算法.我們的目標是:使用php的簡單函數,盡可能的讓摸到籃球的幾率接近于70%.
PHP應用?第一步: $arr=array(“red”,”red”,”red”,”blue”,”blue”,”blue”,”blue”,”blue”,”blue”,”blue”); 這個東西要有,這便是初始化的三個紅球,7個籃球
PHP應用?第二步:隨意的、胡亂的混合.
PHP應用??? 上面一個數組有10個元素,我們可以采取隨機兩個球交換,交換多少次可以本身定
PHP應用??? 先寫個交換函數 (如果這個函數看不懂,就要惡補基礎知識啦)
PHP應用
function swap($i,$j,$arr)
{
$tmp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$tmp;
return $arr;
}
PHP應用??? 這個函數實現,我輸入兩個隨便什么序號,實現對這個數組中符合該序號的求交換一下.
PHP應用?第三步:優化交換算法.
PHP應用? 因為上面的交換函數,輸入的隨機參數導致,紅球和紅球交換,或者籃球和籃球交換.那么然而并沒有實現“真正的”混合
PHP應用? 所以我們要寫個補充函數,確保每次交換,都必需是紅球和籃球進行隨意交換
PHP應用
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)];
}
PHP應用?? 這個函數的作用是:在10個球中找到 紅球或籃球,然后分別取出他們目前所在的序號,然后利用rand函數隨機取一個籃球或者紅球的序號.
PHP應用?? 諾看一下這里:
PHP應用??? $i=getRange($arr,”red”);? //這樣可以取出隨機一個紅球的序號
?? $j=getRange($arr,”blue”); //這樣可以取出隨機一個籃球的序號
PHP應用? 第四步:比擬重要.
PHP應用開始隨意的、胡亂的混合
PHP應用
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/>”; //這個語句可以看一下輸出,混合過后的排列,是否每次都紛歧樣
}
PHP應用?????? 這里的注意點是,$num<10? .代表我混合10次. 等于用你的大手到袋子里胡亂攪10次. 理論上攪的越多,隨機性越強.這里其實10次足以.
PHP應用??? 第四步執行完成后出來的$arr 便是攪拌好的 紅球和籃球的混合體.
PHP應用?第五步:再次調用 rand函數
PHP應用????? echo $arr[rand(0,9)];
PHP應用?? 如果出來的是內容是blue ,則直接exit(“老子很忙,別煩”)
?? 如果是red,那么讓法式繼續執行購買法式吧.
維易PHP培訓學院每天發布《PHP編程:基于PHP實現假裝商品限時搶購繁忙的效果》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/8579.html