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