<?php
set_time_limit(5);class Prise
{
public $winnerList; # 得奖者名单
public $rankList; # 分等次的名单
/**
* 获取某范围内不重复的随机值列 获取得奖者
*
* @param integer $min 最小值
* @param integer $max 最大值
* @param integer $n 数量
* @return array -> integer 返回随机数字组成的数组
*/
public function getWinner($min,$max,$n)
{
$returnNum = array();
$numCount = null;
settype($min,'integer');
settype($max,'integer');
settype($n,'integer');
$isBreak = false;
do
{
$returnNum[] = mt_rand($min,$max); # 推入随机数
$numCount = count($returnNum); # 计算数组单元数目
if ($numCount == $n)
{
$returnNum = array_unique($returnNum); # 清理相同值
$numCount = count($returnNum); # 重新计算单元数目
if ($numCount == $n)
{
$isBreak = true; # 跳出
}
}
}while (!$isBreak) ;
sort($returnNum); # 排序(自然)
shuffle($returnNum); # 打乱排序
$this->winner = $returnNum;
return $returnNum;
}
/**
* 获取有等级的名单
*
* @param integer $min
* @param integer $max
* @param array $rank #获奖等次设置
*/
public function getRank($min,$max,$rank)
{
$rankList = array();
$n = array_sum($rank);
$winnerList = $this->getWinner($min,$max,$n); settype($rank,'array');
$begin = 0;
foreach ($rank as $key => $value)
{
$rankList[$key] = array_slice($winnerList,$begin,$value);
sort($rankList[$key]);
$begin += $value;
} $this->winnerList = $winnerList;
$this->rankList = $rankList;
return $rankList;
}
}
$price = new Prise();
$rank = array('Rank 1'=>1,'Rank 2'=>3,'Rank 3'=>5,'Rank 4'=>10,'Rank 5'=>15);
#等级设置的小了点,以免显示不下输出.
$price->getRank(1,500,$rank);
print_r($price->rankList);
# 输出
//Array
//(
// [Rank 1] => Array
// (
// [0] => 70
// )
// [Rank 2] => Array
// (
// [0] => 112
// [1] => 208
// [2] => 494
// )
// [Rank 3] => Array
// (
// [0] => 185
// [1] => 229
// [2] => 423
// [3] => 451
// [4] => 461
// )
// [Rank 4] => Array
// (
// [0] => 5
// [1] => 26
// [2] => 39
// [3] => 62
// [4] => 90
// [5] => 101
// [6] => 157
// [7] => 254
// [8] => 259
// [9] => 482
// )
// [Rank 5] => Array
// (
// [0] => 137
// [1] => 158
// [2] => 172
// [3] => 184
// [4] => 195
// [5] => 204
// [6] => 236
// [7] => 260
// [8] => 272
// [9] => 277
// [10] => 321
// [11] => 358
// [12] => 390
// [13] => 396
// [14] => 479
// )
//)
?>
set_time_limit(5);class Prise
{
public $winnerList; # 得奖者名单
public $rankList; # 分等次的名单
/**
* 获取某范围内不重复的随机值列 获取得奖者
*
* @param integer $min 最小值
* @param integer $max 最大值
* @param integer $n 数量
* @return array -> integer 返回随机数字组成的数组
*/
public function getWinner($min,$max,$n)
{
$returnNum = array();
$numCount = null;
settype($min,'integer');
settype($max,'integer');
settype($n,'integer');
$isBreak = false;
do
{
$returnNum[] = mt_rand($min,$max); # 推入随机数
$numCount = count($returnNum); # 计算数组单元数目
if ($numCount == $n)
{
$returnNum = array_unique($returnNum); # 清理相同值
$numCount = count($returnNum); # 重新计算单元数目
if ($numCount == $n)
{
$isBreak = true; # 跳出
}
}
}while (!$isBreak) ;
sort($returnNum); # 排序(自然)
shuffle($returnNum); # 打乱排序
$this->winner = $returnNum;
return $returnNum;
}
/**
* 获取有等级的名单
*
* @param integer $min
* @param integer $max
* @param array $rank #获奖等次设置
*/
public function getRank($min,$max,$rank)
{
$rankList = array();
$n = array_sum($rank);
$winnerList = $this->getWinner($min,$max,$n); settype($rank,'array');
$begin = 0;
foreach ($rank as $key => $value)
{
$rankList[$key] = array_slice($winnerList,$begin,$value);
sort($rankList[$key]);
$begin += $value;
} $this->winnerList = $winnerList;
$this->rankList = $rankList;
return $rankList;
}
}
$price = new Prise();
$rank = array('Rank 1'=>1,'Rank 2'=>3,'Rank 3'=>5,'Rank 4'=>10,'Rank 5'=>15);
#等级设置的小了点,以免显示不下输出.
$price->getRank(1,500,$rank);
print_r($price->rankList);
# 输出
//Array
//(
// [Rank 1] => Array
// (
// [0] => 70
// )
// [Rank 2] => Array
// (
// [0] => 112
// [1] => 208
// [2] => 494
// )
// [Rank 3] => Array
// (
// [0] => 185
// [1] => 229
// [2] => 423
// [3] => 451
// [4] => 461
// )
// [Rank 4] => Array
// (
// [0] => 5
// [1] => 26
// [2] => 39
// [3] => 62
// [4] => 90
// [5] => 101
// [6] => 157
// [7] => 254
// [8] => 259
// [9] => 482
// )
// [Rank 5] => Array
// (
// [0] => 137
// [1] => 158
// [2] => 172
// [3] => 184
// [4] => 195
// [5] => 204
// [6] => 236
// [7] => 260
// [8] => 272
// [9] => 277
// [10] => 321
// [11] => 358
// [12] => 390
// [13] => 396
// [14] => 479
// )
//)
?>
然后可以从$last数组中按顺序获奖,这就随便你了。