This article mainly introduces the random red envelope algorithm implemented in PHP. It analyzes the principles, implementation methods and related precautions of the PHP random red envelope algorithm in the form of examples. Friends in need can refer to the following
. The details are as follows:
1. Overall design
There are many kinds of algorithms, you can choose by yourself. The main "architecture" is like this, use redis decr( ) command to limit the current, use mysql to record various required data
2. Red envelope algorithm
For the sake of simplicity, the amount of the red envelope is an integer Expressed, assuming that each red envelope contains *2, It is necessary to pre-allocate one bean to each person at the beginning
function randBean($total_bean, $total_packet) { $min_bean = 1; $max_bean = 5000; $range = 2; $total_bean = $total_bean - $total_packet * $min_bean; //每个人预留一个最小值 $list = []; $min = 1; while(count($list) < $total_packet){ $max = floor($total_bean / $total_packet) * $range; $bean = rand($min, $max); if ($bean <= $max_bean - 1) { $list[] = $bean; $total_bean -= $bean; } } $list[] = $total_bean;//剩余的金豆作为最后一个红包 //合并 foreach ($list as $k => $v) { $list[$k] += $min_bean; } return $list; }
The second one, to simply expand it, the maximum amount of each red envelope is: (remaining amount/number of remaining red envelopes)*3; but it is required to send at least 2 each time Red envelope
The third type, the line segment method, randomly generates a few numbers, divides a straight line into several segments, and the length of each segment (this fluctuates greatly, not very average, if it is restricted The size of each red envelope will be more troublesome)
function abc ($total_bean, $total_packet) { $min = 1; $max = $total_bean -1; $list = []; $maxLength = $total_packet - 1; while(count($list) < $maxLength) { $rand = mt_rand($min, $max); empty($list[$rand]) && ($list[$rand] = $rand); } $list[0] = 0; //第一个 $list[$total_bean] = $total_bean; //最后一个 sort($list); //不再保留索引 $beans = []; for ($j=1; $j<=$total_packet; $j++) { $beans[] = $list[$j] - $list[$j-1]; } // return $beans; echo '<pre class="brush:php;toolbar:false">'; print_r($beans); echo array_sum($beans); } abc(100000, 3);
:
After removing the necessary number of beans, use the remaining number of beans The average value is the maximum value to randomly generate the number of beans this time
Related recommendations: Random red envelope implemented by phpAlgorithm
#phpHow to implement fixed red envelopes and random red envelopes
Algorithm detailed explanation (picture)
php generationRandom red envelope
Algorithm
The above is the detailed content of Detailed explanation of PHP random red envelope algorithm. For more information, please follow other related articles on the PHP Chinese website!