【问题标题】:I just wrote a random number generator in PHP how do you think this can be improved? [closed]我刚刚在 PHP 中编写了一个随机数生成器,您认为这可以如何改进? [关闭]
【发布时间】:2012-07-28 13:27:28
【问题描述】:

我正在为一位客户工作,他希望生成格式为 [char][int][int] 的代码,例如 T56、N78、J89 等... char 必须为大写。

我写了这个函数,因为我发现它最简单

function randomizer(){
    $chars = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
    return $chars[array_rand($chars)].mt_rand(10, 99);
}

但我一直想知道还有许多其他有效的解决方案。上面这个只是工作,但我更注重效率,因为我需要生成大量这样的代码。

还有什么更好的起点!

【问题讨论】:

  • 静态 $chars = range('A', 'Z');
  • 是否允许使用“T05”之类的值?您的函数不会生成它们。
  • 那不是随机数生成器。您正在使用随机数生成器。
  • @Wug 他们确实是被允许的,我的代码错了,我的错!
  • @MarcB 我又坏了!它应该是一个随机代码生成器,我认为我选择的解决方案效果更好......

标签: php performance processing-efficiency memory-efficient


【解决方案1】:
echo chr(mt_rand(65,90)).str_pad((rand()%100),2,0,STR_PAD_LEFT);

【讨论】:

  • 真的很好...我的代码有错误,如上所述它没有生成像 T07 这样的代码...
【解决方案2】:

如果可以的话,您希望将$chars 存储在函数之外,因此不需要每次都创建它(例如,如果您想在循环中生成 1000 个代码)。

另外,这里有一条捷径供你使用

$chars = range("A","Z");

【讨论】:

    【解决方案3】:
    function getRandStr()
    {
        return sprintf("%s%02d", chr(mt_rand(65, 90)), mt_rand(0, 99));
    }
    

    编辑:已根据评论更改,感谢@DaveRandom。

    【讨论】:

    • 我想你后来忘了chr()第一部分,因为ord('A')ord('Z')永远不会改变,最好硬编码整数。另外,我认为sprintf('%02s', mt_rand(0, 99)) 在第二部分会更有效率
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多