用于返回65,66,...,90,97,98,...,122范围内的随机数的PHP过程

时间:2014-05-01 17:19:23

标签: php

我的网络托管服务没有调试器,所以我没有深入了解我的程序失败的原因。我做了以下函数来生成一个长度为n的随机字符串,并尝试尽可能地优化它。知道什么是错的,我怎么可能让它更优雅?我刚刚开始学习PHP,所以有可能我希望其他语言的一些语法转移到PHP,而实际上它们不会。

function rand_str(int $n)
{
    $str = "";
    for (;$n > 0; --$n)
    {
        /* ASCII vals are 'A'=65, 'B'=66, ..., 'Z'=90, 'a'=97, 'b'=98, ..., 'c'=122 */
        int $val = rand(0,51);
        $str += (char)($val < 26 ? $val + 65 : $val % 26 + 97); 
    }
    return $str;
}

3 个答案:

答案 0 :(得分:0)

function rand_str($n)
{
    $str = "";
    for (;$n > 0; --$n)
    {
        $val = rand(0,51);
        $str .= ($val < 26) ? $val + 65 : $val % 26 + 97; //Here you have to concatenate with a '.'
    }
    return $str;
}

答案 1 :(得分:0)

这段代码有效,我认为它更灵活。

function rand_str(int $n)
{
    for ($str = "", $n>0; --$n)
    {
        $val = rand(0,1) ? rand(ord("A"),ord("Z")) : rand(ord("a"),ord("z"));
        $str .= chr ($val); 
    }
    return $str;
}

答案 2 :(得分:0)

代码的工作版本:

function rand_str($n)
{
    $str = "";
    while($n-- > 0)
    {
        /* ASCII vals are 'A'=65, 'B'=66, ..., 'Z'=90, 'a'=97, 'b'=98, ..., 'c'=122 */
        $val = rand(0,51);
        $str .= chr($val < 26 ? $val + 65 : $val % 26 + 97); 
    }
    return $str;
}

如果您只想使用for循环的两个部分,那么您也可以使用while。字符串使用.=连接,而不是+=。您没有在PHP中指定类型。函数chr从ascii代码返回一个字符。

这似乎是一种学习新语言的蛮力方式。只是假设事情会如何发挥作用并不是一个好主意!

另外,即使您无权访问服务器配置,也可以通过在脚本顶部添加这些行来启用警告:

error_reporting(E_ALL);
ini_set("display_errors", 1);

这可以帮助您进行调试。