红包算法的一种实现(PHP)

  

,,,,,,,,前段时间有个项目需要用到红包算法,本以为简单,细想之下有点复杂。于是就百度了一下,没想到查出了不少,有些写的很复杂。由于时间有点紧,我就找了一个简单点的,然后参考着写一个。参考的地址是:https://blog.csdn.net/gorgle/article/details/52954413;

,,,,,,这个地址中的红包是用java写的。根据其原理,我用PHP写了一遍,并且改进了点。他的算法中没有加每个红包最大最小值限制。我用PHP写的时候加上去了。代码如下:

& lt; PHP ?/*   $ total_money:红包总金额   $ total_people:总人数/总分数   $ min_money:每份红包的最小金额   $ max_money:每份红包的最大金额   */function  redpack ($ total_money total_people美元min_money美元,美元max_money) {      ,,数组$ ret=();   ,,数组$ new_ret=();   ,,   ,,total_real_money=total_money - total_people美元*美元min_money;      ,,随著美元[0]=0;   ,,(i=1; i<美元;total_people美元,美元我+ +){   ,,,,,,   ,,,,随著美元($ i)=get_rand (ret张[美元],total_real_money美元,(max_money - min_money美元));   ,,,,   ,,,,,   ,,}      ,(ret);      (j=0; j<美元计数(ret)美元;$ j + +) {      如果($ j==count (ret)美元1){   $ new_ret [count (ret)美元1]=total_real_money - ret美元[count (ret)美元1]+ min_money美元;   其他}{      ,,,,   美元new_ret []=$ ret [$ j + 1] - ret [j]美元+ min_money美元;   }   }         洗牌($ new_ret);   return 才能;new_ret美元;      }         function  get_rand(开始,结束,美元马克斯美元){   ,,,$ tmp=兰德(开始,结束美元);   ,,,total_max=美元开始+马克斯美元;   ,,,,   ,,,如果(tmp>美元;(total_max美元),| |,空(tmp)美元){   ,,,,,,,return  get_rand(开始,结束,美元马克斯美元);   还有,,,}{   ,,,,,,,return  tmp美元;   ,,,}   ,,,,   }


红包算法的一种实现(PHP)