0

如何在数字前后分配随机字符?当我运行脚本时,它给了我相同的随机字符。

这是一个示例代码:

<?php
function randomChar($length = 1) 
{
    $str = ""; 
    $characters = array_merge(range('A','Z'));
    $max = count($characters) - 1;
        for ($i = 0; $i < $length; $i++) 
        {   
            $rand = mt_rand(0, $max);
            $str .= $characters[$rand];
        }  
        return $str; 
}

$test = "0123456789";

echo implode(randomChar(), str_split($test, 1));
?>

当我运行上面的脚本时,它给了我以下输出:

Output: 0Y1Y2Y3Y4Y5Y6Y7Y8Y9

我想要的输出必须是:

Output: 0A1V2J3Y4Z5Q6S7O8R9

有人可以帮我弄清楚吗?谢谢你 :)

4

2 回答 2

3

目前,您只获取单个随机字符并使用它将字符连接在一起 - 这意味着每次都将使用相同的字符。

如果要为每个分隔符生成一个新字符,则需要将输入字符串传递给函数,如下所示:

function insert_random_chars($str, $alphabet = "ABCDEFGHIJKLMNOPGRSTUVWXYZ")
{
    // An array to hold the result
    $result = array();

    // The highest character index in the string
    $max = strlen($alphabet) - 1;

    // Loop the characters in the input string
    foreach (str_split($str, 1) as $char) {
        // Add the current character and a random character to the output array
        array_push($result, $char, $alphabet[mt_rand(0, $max)]);
    }

    // Join the output array together
    return implode('', $result);
}

echo insert_random_chars("0123456789");

示例输出

0L1E2G3T4F5S6E7F8I9M

请注意,此代码并不能完全按照的意愿执行,但它应该会推动您朝着正确的方向前进 ;-)

于 2013-10-24T10:04:59.687 回答
0

调用时randomChar(),需要指定要生成的随机字符的长度。否则,它只会创建 1 个随机字符(默认值)。

您正在使用的implode()函数实际上将从第二个参数粘贴(数组)值并将第一个参数作为“胶水”。因此,即使您randomChar()返回超过 1 个字符,字符串也会为您想要组合的每个数字重复。

示例:0ABC2ABC ... 8ABC9

你需要做的是:

  1. 创建一个空字符串来保存结果字符串。
  2. 生成randomChar()与测试字符串一样多(如果您只希望字符位于数字之间,则为 -1)。
  3. 对于每个数字,将数字和随机字符连接起来,并将其放入来自 #1 的字符串中。
  4. 打印结果。

代码:

function randomChar($length = 1)
{
    $str = "";
    $characters = array_merge(range('A','Z'));
    $max = count($characters) - 1;
        for ($i = 0; $i < $length; $i++)
        {
            $rand = mt_rand(0, $max);
            $str .= $characters[$rand];
        }
        return $str;
}

$test = "0123456789";

$length = strlen ($test);
$combined = '';
$random_char = randomChar ($length);

for ($i = 0;$i < $length; $i++)
{
   $combined .= $test[$i] . $random_char[$i];
}


print $combined . "\n";

示例输出:键盘

于 2013-10-24T10:18:39.143 回答