Exemplo n.º 1
0
 /**
  * 开奖
  *
  * @param $lid
  * @param $city_id
  * @param $property
  * @return array
  */
 public static function calculate_lucky_draw($lid, $city_id, $property, $lucky_draw_times, $lucky_times)
 {
     $lucky_draw_prize = Dao_Cms_LuckyDrawPrize::get_prize_list($lid);
     /** 过滤地区 */
     $lucky_draw_prize = Bll_Cms_LuckyDrawLuckyArea::filter_lucky_prize($lucky_draw_prize, $city_id, $lid);
     /** 过滤积分 */
     $lucky_draw_prize = Bll_Cms_LuckyDrawLuckyProperty::filter_lucky_prize($lucky_draw_prize, $lid, $property);
     if (empty($lucky_draw_prize)) {
         return array('status' => 0, 'message' => '谢谢参与', 'prize_id' => 0, 'debug' => __CLASS__, 'debug_info' => __LINE__, 'prize_title' => '谢谢参与');
     }
     /** 计算各奖品的中奖区间 */
     $max = mt_getrandmax();
     $lucky_number = mt_rand() % $max;
     // 中奖号码
     $luck_prize = array();
     $start = 0;
     foreach ($lucky_draw_prize as $prize) {
         @file_put_contents('/home/www/' . __CLASS__ . '.log', "{$prize['title']}: ", FILE_APPEND);
         $probability = explode('/', $prize['probability']);
         if (count($probability) != 2) {
             continue;
         }
         list($dividend, $divisor) = $probability;
         if ($dividend == 0 || $divisor == 0) {
             continue;
         }
         $probability = $dividend / $divisor;
         if ($lucky_times == 0 && $prize['mulriple'] == 1) {
             $probability = $probability * (1 << $lucky_draw_times);
         }
         $end = min(floor($max * $probability + $start), $max);
         @file_put_contents('/home/www/' . __CLASS__ . '.log', "max={$max}\tstart={$start}\tend={$end}\tLucky={$lucky_number}\n", FILE_APPEND);
         if ($lucky_number >= $start && $lucky_number < $end) {
             $luck_prize = $prize;
             break;
         }
         $start = $end;
     }
     if (empty($luck_prize)) {
         return array('status' => 0, 'message' => '谢谢参与', 'prize_id' => 0, 'debug' => __CLASS__, 'debug_info' => __LINE__, 'prize_title' => '谢谢参与');
     }
     return array('status' => $luck_prize['id'], 'message' => $luck_prize['title'], 'prize_id' => $luck_prize['prize_id'], 'prize_title' => $luck_prize['title'], 'lucky_prize' => $luck_prize);
 }