8

我需要一个 PHP 函数,它生成与具有相同种子的 javascript Math.random() 相同的随机数。

关于 math.random() 的 MDN:

随机数生成器是从当前时间播种的,就像在 Java 中一样。

到目前为止,我尝试了 PHP 的 rand() 生成类似的东西:

srand( time() ); // I use time as seed, like javascript does
echo rand();
Output: 827382

并且 javascript 似乎以自己的方式生成随机数:

Math.random(); Output: 0.802392144203139

我需要与 math.random() 等效的 PHP 代码,而不是新的 javascript 代码。我无法更改 javascript。

4

3 回答 3

13

您可以使用返回值的函数:

PHP

function random() {
  return (float)rand()/(float)getrandmax();
}

// Generates
// 0.85552537614063
// 0.23554185613575
// 0.025269325846126
// 0.016418958098086


JavaScript

var random = function () {
  return Math.random();
};

// Generates
// 0.6855146484449506
// 0.910828611580655
// 0.46277225855737925
// 0.6367355801630765

@elclanrs 解决方案更容易,不需要演员作为回报。


更新

mt_rand()关于 PHP和rand()这里的区别有一个很好的问题:
mt_rand 的缺点是什么?

于 2013-07-17T02:57:31.557 回答
2

Javascript 的 Math.random 给出了一个介于 0 和 1 之间的随机数。零是正确的输出,但不应包含 1。@thiagobraga 的回答可以给出 1 作为输出。我的解决方案是这样的:

function random(){
    return mt_rand() / (mt_getrandmax() + 1);
}

这将给出一个介于 0 和 0.99999999953434 之间的随机数。

于 2014-11-04T10:45:06.877 回答
0

你可以试试:

function random () {
    return (float)("0." . rand(1e15, 999999999999999));
}

甚至:

function random () {
   return rand(1e15, 999999999999999) / 1e15;
}

但是,@elclanrs 解决方案似乎要容易得多。我试过了。

于 2013-07-17T02:44:46.883 回答