【问题标题】:Whats wrong with this PHP While loop script [closed]这个PHP While循环脚本有什么问题[关闭]
【发布时间】:2012-12-31 22:35:15
【问题描述】:

基本上,我创建了一个 SQL 查询以在数据库 $i 中插入大约 5000 个随机数(目前是 10 个)。

我之前尝试只在 MYSQL 中完成,但失败了,不想再在那里浪费时间了。

它将一个 10 位数字随机化,并与数组 ($codes) 交叉检查该数字,该数组包含来自数据库中不同表的超过 100,000 个值。它还将新的随机数添加到新数组 ($newNumbers) 中,因此它不会生成相同的新数字,然后将这些数字添加到 INSERT 查询中。它还有一个嵌套的while 循环来创建第二个数字,该数字也必须是完全唯一的。

希望这是有道理的.. 无论如何,问题似乎出在嵌套的 while 内,它似乎是无限循环(而不是增加 $i),但我不知道为什么。

$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";

$i = 0;
while ($i <= 10){

    $rand = mt_rand(1000000000, 9999999999);
    if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
        $newNumbers[] = $rand;

        $second = 0;
        while ($second == 0){
            $rand2 = mt_rand(1000000000, 9999999999);
            if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
                $query .= " ('', $rand, $rand2)";
                $newNumbers[] = $rand2;
                $second = 1;

                $i++;
            }else
                $duplicates ++;
        }//end second loop



    }else
        $duplicates ++;
}//while

【问题讨论】:

  • 检查这一行:$query .= " ('', $rand, $rand2")"; 在这里解析错误,你有 3 x " :)
  • 谢谢,我简化了查询以进行发布,我检查并在实际查询中是正确的。 :)
  • 使用带有语法高亮的编辑器 NetBeans 是一个不错的免费替代品。
  • 哈哈,在盯着屏幕一小时后自己修复了它,我似乎在第一个 IF 中检查 $rand2,然后才更改为新的。if (!in_array($rand, $codes) &amp;&amp; !in_array($rand2, $newNumbers) ){

标签: php mysql random numbers while-loop


【解决方案1】:

所以看来我在第一个 IF 语句中检查$rand2 不在$newNumbers 数组中,在$i 的第一个循环之后,$rand2 每次都在$newNumbers 中它不会被重新生成,因此是无限循环。

也感谢大家发现带有额外引号的解析错误,我在 TextWrangler 中纠正了它(顺便说一句,这是史诗般的),但在简化发布查询时出错。

if (!in_array($rand, $codes) &amp;&amp; !in_array($rand2, $newNumbers) ){

$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";

$i = 0;
while ($i <= 10){

    $rand = mt_rand(1000000000, 9999999999);
    if (!in_array($rand, $codes) && !in_array($rand, $newNumbers) ){
        $newNumbers[] = $rand;

        $second = 0;
        while ($second == 0){
            $rand2 = mt_rand(1000000000, 9999999999);
            if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
                $query .= " ('', $rand, $rand2)";
                $newNumbers[] = $rand2;
                $second = 1;

                $i++;
            }else
                $duplicates ++;
        }//end second loop



    }else
        $duplicates ++;
}//while

【讨论】:

    【解决方案2】:

    $query .= " ('', $rand, $rand2")"; 行中有一个无关的 " 字符。你应该修改代码如下:

    $query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";
    
    $i = 0;
    while ($i <= 10){
    
        $rand = mt_rand(1000000000, 9999999999);
        if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
            $newNumbers[] = $rand;
    
            $second = 0;
            while ($second == 0){
                $rand2 = mt_rand(1000000000, 9999999999);
                if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
                    $query .= " ('', $rand, $rand2)";
                    $newNumbers[] = $rand2;
                    $second = 1;
    
                    $i++;
                }else
                    $duplicates ++;
            }//end second loop
    
    
    
        }else
            $duplicates ++;
    }//while
    

    【讨论】:

      【解决方案3】:
      $query .= " ('', $rand, $rand2")"; 
      

      检查您的报价

      【讨论】:

        【解决方案4】:
        $query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";
        
        $i = 0;
        while ($i <= 10){
        
            $rand = mt_rand(1000000000, 9999999999);
            if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
                $newNumbers[] = $rand;
        
                $second = 0;
                while ($second == 0){
                    $rand2 = mt_rand(1000000000, 9999999999);
                    if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
                        $query .= " ('', $rand, $rand2)";//missing quotes
                        $newNumbers[] = $rand2;
                        $second = 1;
        
                        $i++;
                    }else
                        $duplicates ++;
                }//end second loop
        
        
        
            }else
                $duplicates ++;
        }//while
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-06
          • 2013-01-19
          • 1970-01-01
          • 2016-07-27
          • 1970-01-01
          相关资源
          最近更新 更多