我有以下函数在字符串的开头和结尾生成一个新的随机字符:
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个随机字符覆盖(dYj9qu
和KHjN6T
)。在该字符串中的每个字符之后,您可以看到Dk2T4
并且它在每个字符后重复返回。这不是我想要的!我希望Dk2T4
是随机的,所以字符串看起来像这样:
dYj9quhDk2T4eTft3bl7yjF4lac34vodkiY0KHjN6T
我还想要从字符串中删除字符串的最后一个字符(“hello” - 在这种情况下是dkiY0
在最后一个字符串中),所以它看起来像这样:
dYj9quhDk2T4eTft3bl7yjF4lac34voKHjN6T
如何解决此问题?
答案 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;
}