如何在数字前后分配随机字符?当我运行脚本时,它给了我相同的随机字符。
这是一个示例代码:
<?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
有人可以帮我解决一下吗?谢谢你:))
答案 0 :(得分: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
请注意,此代码并没有精确你想要的东西,但是它应该让你朝着正确的方向前进; - )
答案 1 :(得分:0)
调用randomChar()
时,需要指定要生成的随机字符的长度。否则,它将只创建1个随机字符(默认值)。
您正在使用的implode()
函数实际上会粘贴第二个参数的(数组)值,并将第一个参数作为“粘合剂”。因此,即使您的randomChar()
返回的字符数超过1个,也会为要合并的每个数字重复字符串。
示例:0ABC2ABC ... 8ABC9
您需要做的是:
randomChar()
与测试字符串一样多(如果只希望字符在数字之间,则为-1)。代码:
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";
示例输出:codepad