基于PHP的限时限时抢购商品的效果
然而,大多数的网站,但不是很好。为了让用户觉得产品很忙,它提醒系统繁忙,我们需要制定一个计划,假装很忙。(除了淘宝,人们不认为其他网站真的很忙,但人是故意让你觉得你不能买它,理解它)。
这篇文章规定了一个规则,你可以根据我的想法来扩展它。
1,商品购买环节,大家可以点。
2,我们要让用户有70%的排队可能性,商品都很忙。
本文是在PHP代码中实现的。
首先,我们思考一下我们在小学所学的知识。
1。如果有10个球,有3个红球和7个篮球,放在包里,碰篮球的机会是什么显然,是70%
我以前把这个需要给了一个小伙伴,他给出的答案如下:
$ ARR =阵列(红色,红色,红色,蓝色,蓝色,蓝色,蓝色,蓝色,蓝色,蓝色);
然后echo ARR {兰德(0.9)};
然后告诉我他做了两个句子。
它真的很聪明,但是这个小家伙忽略了一个非常重要的问题。
2。如果第二个人碰它怎么办这里有一点值得注意。如果第二个人碰它,他们必须填满10个球(仍然是3个红球,7个篮球)。
最重要的是继续混乱,一个随意的混合,这样,第二个人接触篮球的机会仍然是70%。
上面的节目明显被忽略了:继续随意随意地混合,如果每个人在前七个项目中用前三个红色触球,那么PHP的兰德函数不能保证篮球是70%。
说到这一点,很多大人物都会想出各种高级算法,比如拜厄斯和矩阵之类的词,如果这样的电子商务功能使用如此复杂的操作,我相信你的老板不会同意你花这么多时间完成这个功能。
接下来,我给出了一个简单但不准确的算法,我们的目标是尽可能地利用PHP的简单功能,让我们有机会接近70%的篮球。
第一步:$ ARR =阵列(红色,红色,红色,蓝色,蓝色,蓝色,蓝色,蓝色,蓝色,蓝色);这件事,这是三个红色球初始化,7个篮球
第二步:随机,随机混合。
上面的数组有10个元素,我们可以随机两个球交换,你可以自己交换多少次
首先编写一个开关函数(如果函数不能读取,具有追赶的基本知识)。
功能互换(合我,J,$ ARR)
{
TMP =美元美元美元ARR {我};
ARR {我} =美元美元美元美元ARR {,};
ARR { } =美元美元美元,TMP;
返回的数组;
}
这个函数被实现,我输入两个随机序数来实现这个数组中序列号的交换。
第三步是优化切换算法。
由于上面的交换函数,输入的随机参数会导致红球和红球的交换,或者篮球和篮球的交换,那么就没有真正的混合。
因此,我们必须写一个补充的功能,以确保每个交易所必须是一个免费的交换红球和篮球。
功能getrange($ ARR,$ V)
{
$ =数组();
为($我= 0;$我<计数($ ARR);$我+ +)
{
如果($ ARR { $我} = = $ V)
{
美元;
}
}
返回$(0,计数(RET)- 1)};
}
这个函数的作用是在10个球中找到红球或篮球,然后提取他们所属篮球运动员的序号,然后用兰德函数随机挑选出篮球或红球的序列号。
看这里。
我= getrange($ ARR,红色); / /这可能需要一个随机数的红
J = getrange($ ARR,蓝色); / /这可能需要一个随机数的篮球
第四步:更重要。
开始一个随机的,随机的混合
为($ = 0;美元;10;美元+ +)
{
我= getrange($ ARR,红色);
J = getrange($ ARR,蓝色);
$ ARR =互换($ I,J,$ ARR);
(美元崩溃,ARR,回声/。|美元。我|美元。J.); / /这个语句可以看输出,混合安排,无论是各不相同的
}
这里的关注点是,$num<10。我混合在我倍10倍大的手代表你的包,理论更多的激荡,更多的随机性,这实际上是10次足够。
$ ARR出来后,第四步是混合搅拌的红球和蓝球。
第五步:再次调用兰德函数
echo ARR {兰德(0.9)};
如果内容是蓝色的,那么直接退出(Lao Tzu非常忙,不要打扰)
如果是红色,则让程序继续执行购买程序。