在字符串中的每个字符后随机播放新字符

时间:2013-09-29 10:11:43

标签: php string split shuffle

我有以下函数在字符串的开头和结尾生成一个新的随机字符:

function random($string) {

    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $shuffle_start = substr(str_shuffle($chars), 0, 6);
    $shuffle_end = substr(str_shuffle($chars), 0, 6);
    $str = chunk_split($string, 1, substr(str_shuffle($chars), 0, 5));

    return $shuffle_start . $str . $shuffle_end;

}

你可以看到$str我试图在字符串中的每个字母后面得到5个随机字符,这就是我需要一些帮助。就像现在一样,这个函数打印出来:

dYj9quhDk2T4eDk2T4lDk2T4lDk2T4oDk2T4KHjN6T

该字符串为“hello”,并在字符串的开头和结尾处由6个随机字符覆盖(dYj9quKHjN6T)。在该字符串中的每个字符之后,您可以看到Dk2T4并且它在每个字符后重复返回。这不是我想要的!我希望Dk2T4是随机的,所以字符串看起来像这样:

dYj9quhDk2T4eTft3bl7yjF4lac34vodkiY0KHjN6T

我还想要从字符串中删除字符串的最后一个字符(“hello” - 在这种情况下是dkiY0在最后一个字符串中),所以它看起来像这样:

dYj9quhDk2T4eTft3bl7yjF4lac34voKHjN6T

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

这是因为chunk_split只评估substr(str_shuffle($chars), 0, 5)一次。您需要迭代字母并为每个字母生成序列:

function random($string) {

    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $shuffle_start = substr(str_shuffle($chars), 0, 6);
    $shuffle_end = substr(str_shuffle($chars), 0, 6);
    $letters = str_split($string);
    $str = '';
    $count = count($letters);
    foreach($letters as $l){
        $count--;
        $str .= $l;
        if($count){ // add 5 characters if not last letter
            $str .= substr(str_shuffle($chars), 0, 5);
        }
    }

    return $shuffle_start . $str . $shuffle_end;
}