我的网络托管服务没有调试器,所以我没有深入了解我的程序失败的原因。我做了以下函数来生成一个长度为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;
}
答案 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);
这可以帮助您进行调试。