1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| <?php
function luck_draw() { $prize = [ [ 'id' => 1, 'name' => '奖品1', 'type' => 1, 'stock' => 123, 'total' => 123, 'probability' => 10.000, 'upper_limit' => 1, ], [ 'id' => 2, 'name' => '未中奖-兜底', 'type' => 2, 'stock' => 123, 'total' => 123, 'probability' => 10.0000, 'upper_limit' => 123, ], ];
$value = random_int(1, 100 * 10000);
shuffle($prize);
$i = 0;
$v = 0;
$p = null;
while(true) { if(!isset($prize[$i])) { break; }
$item = $prize[$i];
$v = $v + (int) bcmul($item['probability'], 10000, 1);
if($value > $v) { $i++;
continue; }
if($item['total'] !== -1 && $item['stock'] <= 0) { break; }
$p = $item;
break; }
if(is_null($p)) { $p = array_filter($prize, function($item) { if($item['type'] !== 2) { return false; }
if($item['total'] === -1) { return true; }
return $item['stock'] > 0; });
if(!$p) { return '需配置未中奖兜底'; } $p = current($p); }
return $p['id']; }
luck_draw();
|