我需要输出一个包含10个字母数字/下划线字符的随机字符串,第一个字符不能是数字。我的代码如下:
$arr = array_merge(range("a", "z"), range("A", "Z"), array("_"));
$name = array_rand($arr);
$arr = array_merge($arr, range(0, 9));
for($i = 1; $i < 10; $i++)
{
$name .= array_rand($arr);
}
echo $name;
但是输出很奇怪,总是像3329323960047113937
或933255318725381013
或48212116303047152448
。为什么它超过十个字符,为什么它以数字开头(虽然当我启动变量$name
时,$arr
内没有数字?)?我应该使用foreach
代替for
循环吗?或者我应该使用除array_rand()
之外的其他功能吗?我只是PHP的初学者,很抱歉这个愚蠢的问题。并提前感谢所有人。
答案 0 :(得分:3)
array_rand返回随机数组键,而不是随机数组条目。更多信息可以在这里找到:http://www.php.net/manual/en/function.array-rand.php
我已经更正了您的代码:
$arr = array_merge(range("a", "z"), range("A", "Z"), array("_"));
$name = $arr[array_rand($arr)];
$arr = array_merge($arr, range(0, 9));
for($i = 1; $i < 10; $i++)
{
$name .= $arr[array_rand($arr)];
}
echo $name;
输出示例:
NQvCKSkyym
答案 1 :(得分:0)
这样做.. array_rand()
只返回数组中的随机密钥。您需要在数组中对其进行处理以获取随机元素。
<?php
$arr = array_merge(range("a", "z"), range("A", "Z"), array("_"));
$arr = array_merge($arr, range(0, 9));
for($i = 1; $i < 10; $i++)
{
//$name .= array_rand($arr);
$key = array_rand($arr);
$name .=$arr[$key];
}
echo $name;
输出:
5Ts9hz7NZ5