# PHP 实现随机红包算法 【提供两个方法】

1. 普通红包

2. 拼手气红包

 1234567891011121314151617181920 // $bonus_total 红包总金额//$bonus_count 红包个数// $bonus_type 红包类型 1=拼手气红包 0=普通红包function randBonus($bonus_total=0, $bonus_count=3, $bonus_type=1){  $bonus_items = array(); // 将要瓜分的结果 $bonus_balance = $bonus_total; // 每次分完之后的余额 $bonus_avg   = number_format($bonus_total/$bonus_count, 2); // 平均每个红包多少钱  $i = 0; while($i<$bonus_count){ if($i<$bonus_count-1){ $rand      = $bonus_type?(rand(1, $bonus_balance*100-1)/100):$bonus_avg; // 根据红包类型计算当前红包的金额 $bonus_items[] = $rand; $bonus_balance -= $rand; }else{ $bonus_items[] = $bonus_balance; // 最后一个红包直接承包最后所有的金额，保证发出的总金额正确 } $i++;  }  return $bonus_items;} 好吧，我们现在来体验一下  123456 // 发3个拼手气红包，总金额是100元$bonus_items  = randBonus(100, 3, 1);// 查看生成的红包var_dump($bonus_items);// 校验总金额是不是正确，看看微信有没有坑我们的钱var_dump(array_sum($bonus_items));

 1234567891011121314151617181920212223 function sendRandBonus($total=0, $count=3, $type=1){ if($type==1){    $input = range(0.01, $total, 0.01);    if($count>1){ $rand_keys = (array) array_rand($input, $count-1);      $last = 0; foreach($rand_keys as $i=>$key){        $current = $input[$key]-$last;        $items[] = $current;        $last = $input[$key]; } } $items[]    = $total-array_sum($items);  }else{    $avg = number_format($total/$count, 2); $i       = 0;    while($i<$count){      $items[] = $i<$count-1?$avg:($total-array_sum($items));      $i++; } } return $items;}

PHP实现迪菲赫尔曼密钥交换(Diffie–Hellman)算法

PHP生成迷宫及自动寻路算法详解