抽奖程序中随机概率的测试

最近一个项目里关于抽奖活动的概率引发了一些争执,
讲一下整个抽奖流程:
一共有M种元素,用户集齐其中的N种即算中奖,M种元素获得的概率都不相同.然后用户每天有T次机会可以抽奖,其中满足条件T>M;另说明我不是做游戏的,对于这方面来说有些欠缺,只能摸着石头过河,一段代码来验证概率是否合理.

$arr = array(
    'h1' => 30,
    'h2' => 30,
    'h3' => 8,
    'h4' => 8,
    'h5' => 8,
    'h6' => 8,
    'h7' => 8,
    'h8' => 5,
    ...
);

$lucky = array();
foreach( $arr as $k=>$v )
{
    $lucky += array_fill( count($lucky),$v,$k );
}

$user = array();
$limit = array();
$j = 0;
//采样数量$k
for( $k =0; $k < 1000;$k++ )
{
    $i = 1;
    while(true)
    {
        $a = $lucky[mt_rand(0,99)];
        if( !in_array( $a, $user ) )
        {
            $user[] = $a;
        }
            //达到获奖条件N
        if( count($user) >N )
        {
            $user = array();
            break;
        }
        $i++;
    }

    //用户每天有T次机会
    if( $i <= T )
    {
        $j++;
    }

    $limit[] = $i;

}

//这里得到采样中达到获奖资格平均需要多少次抽奖
var_dump(array_sum( $limit )/1000);

//得到在$k中有多少人可以在抽奖资格内的中奖
echo $k.'人中有多少人第一天能中奖'.($j);