PHP相当于javascript Math.random()

时间:2013-07-17 02:38:37

标签: php javascript random time

我需要一个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。

3 个答案:

答案 0 :(得分:11)

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

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解决方案更容易,不需要转换。


更新

这里有关于PHP mt_rand()rand()之间差异的一个很好的问题:
What's the disadvantage of mt_rand?

答案 1 :(得分:2)

Javascript的Math.random给出0到1之间的随机数.Zero是正确的输出,但不应包含1。 @ thiagobraga的回答可以给出1作为输出。我的解决方案是:

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

这将给出0到0.99999999953434之间的随机数。

答案 2 :(得分:0)

你可以尝试:

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

甚至:

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

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