php程式碼實現紅包功能的方法:1、透過distribute_red_bages方法實作拼手氣紅包;2、透過average_red_bages方法實作均分紅包;3、透過rob_red_bages方法實作規定紅包數。
本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦
php程式碼怎麼實作紅包功能?
PHP 紅包功能代碼
前段時間被問到這個問題,最近有空就寫寫啦,還是挺有趣的
首先做下搶紅包方法分類:
對於發紅包的人來說,一共有大致3類(其他的我暫時沒想到,有想到可以聯繫我呀~)
#一、拼手氣紅包個數不定(完全看運氣)
二、拼手氣紅包規定個數(個數一定,至少一分)
三、平均分紅包(個數一定,大家平分)還是這個好寫吧!嘿嘿
上程式碼:
<?php var_dump(rob_red_bages(5 , 10)); var_dump(distribute_red_bages(5)); /* 方法主要功能:拼手气红包(个数不定) 一个参数 参数一: 红包总金额(按分计算) */ function distribute_red_bages($sum){ $sum = $sum*100; $i=0; while($sum>0){ $temp = rand(1 , $sum);//红包值 $sum -= $temp; $arr[$i++] = $temp/100; } //check($arr); return $arr; } /* 方法主要功能:均分红包 两个参数: 参数一: 红包总金额 参数二: 均分个数 */ function average_red_bages($sum , $num){ $res = $sum/$num; for($i=0 ; $i<$num ; $i++){ $arr[$i] = $res; } //check($arr); return $arr; } /* 方法主要功能:规定个数的手气红包 两个参数: 参数一:红包总金额 参数二:红包个数 计算流程,随机生成num个数 求和得到m 用sum/m 得到每个数需要k 用随机数*k */ function rob_red_bages($sum , $num){ $sum = $sum*100; for($i=0 ; $i<$num ; $i++){ $temp = rand(1 , $sum); $arr[$i] = $temp; $sumall += $temp; } $k = $sum/$sumall; for($i=0 ; $i<sizeof($arr); $i++){ $arr2[$i] = $arr[$i]*$k/100; } return $arr2; } /*红包总额检测*/ function check($arr){ foreach($arr as $a){ $sum += $a; echo $a."+"; } echo " 0 =".$sum."\n"; } ?>
下面分析下拼手氣紅包吧(平分的就不說了,大家都會):
拼手氣紅包個數不定思路: (總金額:sum)
---->隨機第一個小於sum的數: n
---->總金額減去該數: temp = sum -n
---->隨機小於temp的數字
---->遞迴上述方法直到總金額為0
---- >傳回儲存隨機結果的陣列
這個方法比較常規,用來實作規定個數的紅包也是可以實現的!不過~
拼手氣紅包規定個數想法(總數sum,紅包個數num )
---->隨機num個小於sum的數,產生陣列
---->對這些數字求和得到allsum
---->用sum除以allsum得到所有生成數的公倍數
----> ;數組每個元素與公倍數相乘得到每個紅包的數值
這個方法有缺點(最終的結果可能會略大於sum,或者略小於sum 因為除法可能出現無理數)
大概就是這些啦!歡迎交流指正! ~~~
推薦學習:《PHP影片教學》
以上是php程式碼怎麼實現紅包功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!