- ベストアンサー
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()); などを追加しなくてもよくなったのでしょうか? これらをしなくても更新の度に値は変っています
- みんなの回答 (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)など、固定の種を与えてやれば、毎回同じ乱数を発生できるようです。
その他の回答 (1)
- arcsin
- ベストアンサー率70% (28/40)
http://php.s3.to/man/function.mt-rand.html より、 注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。 とあるように、PHP4.2以降は乱数の種の生成を自動でやってくれるようになったようです。
補足
ありがとうございます 注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。 の意味は mt_srand()を使うときにmt_srand(time())というふうにmt_srand()にtime()のようなシードを与える必要が無く mt_srand()とだけ記せばよいという意味で mt_rand()を使うときにmt_srand()を使わなくてもよいという意味ではない ということではないのでしょうか?
お礼
ありがとうございます 通常は何もしないでMT_RANDをを日出せば異なるパターンの乱数を発生するが、 同じパターンの乱数を発生させた駆ればMT_SRANDを使うということですね MT_SRANDにも使い道が残ったということですか