既然是随机取,就与优先级无关若要指定优先级,比如6
那就在b、g、h中取好了,何必多此一举不理解

解决方案 »

  1.   

    楼主可以这么做
    如:
    e -> 7
    f -> 3
    g -> 6
    就可以把7个e,3个f,6个g作为基数,然后在随机在16个字母里取
      

  2.   

    RE:xuzuning(唠叨) 因为我要取的次数不是一次也就是说优先级别越高的总共取得的次数就越多这样可以吗?
      

  3.   

    哦,但是你没有说清楚。
    注意由于是随机提取,所以并不能完全保证“优先级别越高的总共取得的次数就越多”只是取到优先级别高的概率大些
    <?php
    $ar = array( // 优先级数组
    a => 5,
    b => 6,
    c => 5,
    d => 4,
    e => 7,
    f => 3,
    g => 6,
    h => 6,
    );
    $pattern = array();
    foreach($ar as $k=>$v) {
      $pattern = array_pad($pattern, count($pattern)+$v, $k); //简单的算法,按优先级扩展数组。你可能要用幂级数展开
    }
    print_r($pattern); // 检查
    srand ((float) microtime() * 10000000);
    shuffle($pattern); // 打乱数组
    print_r($pattern); // 检查// 测试
    $n = count($pattern);
    for($i=0;$i<10;$i++)
      echo $pattern[rand(0,$n)];
    ?>