使用for循环和array_rand()的代码有什么问题?

时间:2014-01-15 04:32:03

标签: php arrays for-loop random

我需要输出一个包含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;

但是输出很奇怪,总是像332932396004711393793325531872538101348212116303047152448。为什么它超过十个字符,为什么它以数字开头(虽然当我启动变量$name时,$arr内没有数字?)?我应该使用foreach代替for循环吗?或者我应该使用除array_rand()之外的其他功能吗?我只是PHP的初学者,很抱歉这个愚蠢的问题。并提前感谢所有人。

2 个答案:

答案 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