【问题标题】:How to check duplicate results of a random character generator如何检查随机字符生成器的重复结果
【发布时间】:2015-05-10 16:47:01
【问题描述】:

我已经制作了一个随机字符生成器,​​但是如何检查结果是否重复?
例如,如果我想要 100000 个结果,我如何检查结果是否在 100000 个结果中不重复?

for ($i=0; $i<$quantity; $i++){
$a = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
$b = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
$c = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
$d = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
$code = "$a-$b-$c-$d";
echo $code .'<br>';
}

提前致谢!

【问题讨论】:

  • 删除了运行 sn-p 标记

标签: php


【解决方案1】:

可能是这样的?使用 in_array()

$previous = array();

for ($i=0; $i<$quantity; $i++){
    $unique_found = false;
    while(!$unique_found){
        $a = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
        $b = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
        $c = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
        $d = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);

        $code = "$a-$b-$c-$d";

        if(!in_array($code,$previous)){
            $unique_found = true;
            $previous[] = $code;
            echo $code .'<br>';
        }
    }

}

【讨论】:

    【解决方案2】:

    您要做的第一件事是将生成的所有代码保存到一个数组中。

    $codes = array();
    for ($i=0; $i<$quantity; $i++){
        $a = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
        $b = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
        $c = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
        $d = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
        $code = "$a-$b-$c-$d";
        echo $code .'<br>';
        $codes[] = $code;
    }
    

    为了检查它是否包含重复,this answer 提出了以下解决方案:

    if (count($codes) == count(array_unique($codes))) {
        // array contains duplicates
    }
    

    如果您对哪些代码完全重复感兴趣,请尝试使用此方法。我首先对数组进行排序(以确保相等的值是连续的),然后检查两个连续的值是否相等。

    sort($codes);
    for ($i = 0; $i < count($codes) - 2; $i++) {
        if ($codes[$i] == $codes[$i + 1]) {
            // $codes[$i] is a duplicate
        }
    }
    

    如果你暗示你想摆脱重复,那么它就像使用array_unique一样简单:

    $codes = array_unique($codes);
    

    【讨论】:

    • 感谢您的帮助!
    【解决方案3】:
    $myValues = array();
    for ($i=0; $i<$quantity; (if($unique){$i++;})){
     $a = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
     $b = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
     $c = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
     $d = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
     $code = "$a-$b-$c-$d";
     $unique = false;
     if(!in_array($code,$myValues)){
       $myValues[] = $code;
       echo $code .'<br>';
       $unique = true;
     }
    }
    

    【讨论】:

      【解决方案4】:

      您可以将代码用作数组中的键,因此重复的将被覆盖:

      $results = array();
      $quantity = 10000;
          while (count($results) < $quantity) {
             $a = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
             $b = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
             $c = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
             $d = substr(str_shuffle("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
      
             $code = "$a-$b-$c-$d";
             $results[$code] = $code;
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 2017-04-05
        • 2020-04-09
        • 2010-12-07
        • 2017-04-11
        • 2013-05-31
        相关资源
        最近更新 更多