如何将[A-Za-z0-9]
/
或-
中的随机字符每隔一个字符添加到字符串中?例如,input:
Hello_world!
输出:
H3e7l2l-o2_aWmocr9l/db!s
编辑:下面是我尝试过的方法,但是没有标记为Here
的行下面的行,这行会抛出错误Uncaught TypeError: implode(): Argument #2 ($array) must be of type ?array, string given in...
.
我想这是因为$char的一个片段不是一个数组,当我在Here
下面添加了一行来将字符串"转换"为数组时,出现了另一个错误:Uncaught TypeError: str_repeat(): Argument #1 ($string) must be of type string, array given in...
<?php
$string = "Hello_World!";
$length = strlen($string);
$string = str_split($string, 2);
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/-";
//Here
$chars = (is_array($chars)) ? $chars : [$chars];
for($i = 0; $i < ($length / 2); $i++){
$char = substr(str_shuffle(str_repeat($chars, 1)), 0, 1);
$added = implode($string[$i], $char);
}
echo $string;
?>
3条答案
按热度按时间szqfcxe21#
str_split
将输入字符串拆分为字符,然后array_reduce
使用添加的随机字符重新组合它们。qhhrdooz2#
vmjh9lq93#
由于您的输入都是字符串,并且随机字符池只包含单字节字符,因此可以直接完成此任务,而无需数组函数和连接。
通过
preg_replace_callback()
调用要插入到原始字符串中每个字母后面的随机字母。代码:(Demo)
\K
告诉regex引擎忽略先前匹配的字符,这样不会丢失任何字符--在每个字符后面的零宽度位置添加随机字母。如果您正在处理输入数组,那么可能值得阅读Implode array with array of glue strings,了解
vprintf()
的巧妙技巧。