+ -
当前位置:首页 → 问答吧 → mt_rand函数超时问题。求助,急急急。

mt_rand函数超时问题。求助,急急急。

时间:2011-06-17

来源:互联网



生成海量(例如10W)无重复随机数的时候,会遇到mt_rand函数超时的问题?请问有没有解决的办法?
附段代码:
  1. function get_activation_string($length){

  2.                 $rand_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  3.         
  4.                 $len = strlen($rand_str) - 1;
  5.                 $key = "";
  6.         
  7.                 for($i = 0; $i < $length; $i ++) {
  8.                     $key .= $rand_str[mt_rand(0, $len)];
  9.                 }
  10.                 return $key;
  11.                 }
复制代码

再加段代码,个人猜测是因为上面函数会被循环N次。所以就出现了超时的问题。
  1. for($i = 0; $i < $hRandLen ; $i++){
  2.                                          
  3.                                          if($i == $hRandLen - 1){
  4.                                                  $end = $total;
  5.                                          } else{
  6.                                                  $end = ($i + 1) * $perNum;
  7.                                          }
  8.                                          
  9.                                         $condition = "";
  10.                                          $tmpArr = array();
  11.                                          
  12.                                          for($j = ($i * $perNum);$j < $end;$j++){
  13.                                                  $k = 0;
  14.                                                 
  15.                                                 while(true){
  16.                                                          $activation_str = $this->get_activation_string($strLen);
  17.                                                         $activation_key = $bzmark . $bzcode_key . $ac_key . $hRandStr[$i] . $activation_str;
  18.                                                         if(!isset($tmpArr[$activation_key])) {
  19.                                                                 $tmpArr[$activation_key] = true;
  20.                                                                 $condition .= "('$acid','0','0','0','0','$activation_key'),";
  21.                                                                 break;
  22.                                                         }
  23.                                                         if($k > 100)
  24.                                                                 break;
  25.                                                         $k++;
  26.                                                 }
  27.                                          }
  28. }
复制代码

作者: monster.zhu   发布时间: 2011-06-17

你这不是找事吗..

作者: xiaokai   发布时间: 2011-06-17