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


PHP procedure for returning a random number in the range 65, 66, ..., 90, 97, 98, ..., 122

我的web托管服务没有调试器,所以我不知道我的过程失败的原因。我制作了以下函数来生成一个长度为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;
}

代码的工作版本:

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);

这将有助于您进行调试。

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

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;
}
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;
}