• ベストアンサー

PHPの乱数を発生させる

ときに <?php echo mt_rand(0,9); ?> では毎回同じ値が出て駄目だとなっていましたが 最近ではわざわざ <?php mt_srand(); echo mt_rand(0,9); ?> とか <?php mt_srand(time()); echo mt_rand(0,9); ?> とかのように mt_srand(); や mt_srand(time()); などを追加しなくてもよくなったのでしょうか? これらをしなくても更新の度に値は変っています

質問者が選んだベストアンサー

  • ベストアンサー
  • arcsin
  • ベストアンサー率70% (28/40)
回答No.2

#1です。 うーん、たしかにそう言われてみれば… しかし srand()/mt_srand()については下記のサイトでこのように紹介されています。 http://always-pg.com/php/std_rd/number/srand.html 「srand 関数を呼び出す前に rand 関数を呼び出した場合、毎回違った乱数が発生します。 mt_rand 関数についても同様です。」 「毎回違った乱数を発生させる場合は、srand 関数または mt_srand 関数を呼び出す必要はありません。」 mt_srand()のドキュメントでも、注意とは別に「PHP 4.2.0以降、seedはオプションとなり」とありますので自動で行われるようになったと解釈してよいのではないでしょうか。 ちなみに mt_srand(0)など、固定の種を与えてやれば、毎回同じ乱数を発生できるようです。

参考URL:
http://always-pg.com/php/std_rd/number/srand.html
guuman
質問者

お礼

ありがとうございます 通常は何もしないでMT_RANDをを日出せば異なるパターンの乱数を発生するが、 同じパターンの乱数を発生させた駆ればMT_SRANDを使うということですね MT_SRANDにも使い道が残ったということですか

その他の回答 (1)

  • arcsin
  • ベストアンサー率70% (28/40)
回答No.1

http://php.s3.to/man/function.mt-rand.html より、 注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。 とあるように、PHP4.2以降は乱数の種の生成を自動でやってくれるようになったようです。

guuman
質問者

補足

ありがとうございます 注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。 の意味は mt_srand()を使うときにmt_srand(time())というふうにmt_srand()にtime()のようなシードを与える必要が無く mt_srand()とだけ記せばよいという意味で mt_rand()を使うときにmt_srand()を使わなくてもよいという意味ではない ということではないのでしょうか?

関連するQ&A