这个PHP While循环脚本有什么问题

时间:2013-01-17 11:37:35

标签: php mysql random numbers while-loop

基本上我创建了一个SQL查询,在数据库$i中插入大约5000个随机数(目前只有10个才能弄明白)。

我之前曾尝试仅在MYSQL中进行此操作,但失败了,不想再浪费时间了。

它随机化一个10位数字并交叉检查该数字与数组($codes),其中包含来自数据库中不同表的超过100,000个值。它还将新的随机数添加到新数组($newNumbers),因此它不会生成相同的新数字,然后将数字添加到INSERT查询中。它还有一个嵌套的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

4 个答案:

答案 0 :(得分:2)

$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

答案 1 :(得分:1)

$query .= " ('', $rand, $rand2")"; 

检查你的报价

答案 2 :(得分:0)

您的"行中有一个无关的$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 :(得分:0)

所以我似乎在检查$rand2是否在第一个IF语句中的$newNumbers数组中,$i$rand2的第一个循环之后每次都在$newNumbers,因为它不会再生,因此无限循环。

还要感谢所有人用额外的引号发现解析错误,我在TextWrangler(顺便说一下这是史诗)中使用了它,但在简化发布查询时出错了。

if (!in_array($rand, $codes) && !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