【问题标题】:What’s wrong in my code with for loop and array_rand()?我的代码中的 for 循环和 array_rand() 有什么问题?
【发布时间】:2014-01-15 04:32:02
【问题描述】:

我需要输出一个包含 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 的初学者,很抱歉这个愚蠢的问题。并提前感谢大家。

【问题讨论】:

  • foreachfor 循环不会对输出产生影响。它们只是不同的循环流。此外,array_ran() 返回数组键,而不是值。

标签: php arrays for-loop random


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这样做.. 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
    

    【讨论】:

    • 我已经测试了你的代码...输出总是以数字开头,通常超过十个字符。
    • echo substr(strrev($name),1);替换echo $name;
    • 这并不能解决问题。问题是第 2 行的 array_rand 返回一个数组键,而不是数组条目,需要更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2011-04-23
    • 2018-03-14
    • 2016-05-05
    • 1970-01-01
    • 2022-12-06
    相关资源
    最近更新 更多