Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在字符串中的每个字符后洗牌新字符_Php_String_Split_Shuffle - Fatal编程技术网

Php 在字符串中的每个字符后洗牌新字符

Php 在字符串中的每个字符后洗牌新字符,php,string,split,shuffle,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);

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

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


如何解决此问题?

之所以发生这种情况,是因为
块分割
只对
子序列(str\u 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;
}

这解决了洗牌问题:)非常感谢!但我如何删除问题中描述的最后5个字符?@ErikEdgren更新。现在不追加最后5个字符。