1

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

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

我该如何解决这个问题?

4

1 回答 1

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;
}
于 2013-09-29T10:19:39.003 回答