PHP:在数字前后分配随机字符?

时间:2013-10-24 09:51:44

标签: php random output implode

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

这是一个示例代码:

<?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
有人可以帮我解决一下吗?谢谢你:))

2 个答案:

答案 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");

Example output

  

0L1E2G3T4F5S6E7F8I9M

请注意,此代码并没有精确你想要的东西,但是它应该让你朝着正确的方向前进; - )

答案 1 :(得分:0)

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

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

示例:0ABC2ABC ... 8ABC9

您需要做的是:

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

    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