【问题标题】:php mt_rand generate numbers of x length with all zero's of said given length as wellphp mt_rand 生成 x 长度的数字,其中所述给定长度的全为零
【发布时间】:2012-10-03 22:34:02
【问题描述】:

我需要生成一串 20 位数字的数字。以 20 个零开头,以 20 个 9 结尾。我可以通过 for 循环运行普通的 rand(0,9) 轻松做到这一点。

for ($i = 0; $i < 20; $i++)
{
   $rng_salt .= rand(0,9);
}

但是可以说,循环是一个漫长的过程。我想尝试弄清楚如何用mt_rand(00000000000000000000, 99999999999999999999) 或类似的东西做同样的事情。最好我想取消循环并尽可能将其分解为一行。

【问题讨论】:

  • 只在这两个和左填充0之间生成一个数字?
  • 左垫?现在正在做mt_rand() 就像我在做的那样我得到一个错误,关于最大值或另一个小于最小值。
  • 你指的是STR_PAD_LEFT标志?

标签: php string random


【解决方案1】:

你仍然可以将整个循环放在一行中

for($i = 0, $rng_salt = ""; $i < 20; $i ++, $rng_salt .= mt_rand(0, 9));
var_dump($rng_salt);

你也可以到处玩

$rng_salt = implode("",array_map(function($var){ return mt_rand(0, 9);}, range(0,19)));
var_dump($rng_salt);

做一些洗牌怎么样

$rng_salt = array_merge(range(0,9),range(0,9));
shuffle($rng_salt);
var_dump(implode("",$rng_salt));

【讨论】:

  • 好吧,我知道我可以将循环分成一行,但如果可能的话,我想取消循环过程。
  • 嗯,你肯定给了我很多工作。我会看看哪个更适合我的整体需求,谢谢。
  • 仅供参考。并不是说我为他们做了任何官方的基准测试。但是使用shuffle 运行版本通过1000 循环和使用array_map 的循环。随机播放的生成和加载似乎比其他的要快得多。再次感谢您的帮助,希望这个问题将来也能对其他人有所帮助
  • 我想看看@chris 的号码
  • @chris 你是对的shuffle 比其他人更快.. 参见基准:codepad.viper-7.com/4VkFft
【解决方案2】:

在这里跳出框框思考。生成范围的随机数到下一个小数点,然后简单地剪掉第一个数字 [1]。

$rng_salt = substr(mt_rand(100000000000000000000, 1999999999999999999999),1,20)

检查 substr 参数。我可能对数字不感兴趣。

【讨论】:

  • 这有点傻,你可以填充它,更不用说 OP 正在运行最大数量限制。
  • 是的。当然。你也可以垫它。它只会增加一个字符串操作步骤。不过绝对比任何一天的循环都要好。
猜你喜欢
  • 2018-08-07
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
相关资源
最近更新 更多