0

このランダム文字列ジェネレーターを取得してランダム文字列を作成するにはどうすればよいですか。リピートし続けています。配列は一般的に 0 ~ 10 のもので構成されていますが、それでも繰り返しで同じ数のベッドとバスを取得しています。統計的にめちゃくちゃであることはわかっています。

リピートをなくすにはどうすればよいですか?

    for ($i = 0; $i <= 1000000; $i++) {

      srand($i);
      $price = rand(20000, 1000000);
      $bed = rand(0, 20);
      $bath = rand(0, 7);
      $addressnum = rand(100, 10000);
      $address = (int) preg_replace('/\D/', '', $addressnum) . " lol st";
      $province = $f_contents[rand(0, count($f_contents) - 1)];
      $postedby = 3;
      $description = $de_contents[rand(0,count($de_contents) - 1)];
      $status = "Unsold";
      $type = $status_a[array_rand($status_a)];
      $category = $category_type[array_rand($category_type)];
      $size = rand(100,100000);
      $builtin = rand(1850, 2013);

      $queryString = "INSERT INTO listings 
      (PRICE, ADDRESS, PROVINCE, DESCRIPTION, STATUS, TYPE, CATEGORY, SIZE, BUILTIN, BED, BATH, POSTED_BY) VALUES 
      ($price, '$address', '$province', '$description', '$status', '$type', '$category', $size, $builtin, $bed, $bath, $postedby)";
      echo $queryString . "<br>"; 
      $query = $db -> query($queryString);
    }
4

2 に答える 2

0

srand()ループの外に出ます。srand()プログラム内で一度だけ呼び出す必要があります。その後、rand()ランダムな結果が生成されます。繰り返し呼び出すとsrand()、乱数はまったく取得されず、呼び出し元のシードのハッシュ値が取得されます。

確かに、に切り替えるとmt_rand()さらに高品質の乱数が得られますが、それはコードの問題ではありませんでした。

于 2013-06-14T13:40:32.750 に答える
0

rand() の使用を停止します。代わりに mt_rand() を使用すると、この問題を解決できます。

rand() と繰り返し値で何度か問題に遭遇しました。そのような場合、rand() が不安定に見える理由を確認するのに時間をかけたことがないことを認めなければなりません。

于 2013-06-14T09:47:37.507 に答える