php 在字符串的每个字符后添加随机字符

zvms9eto  于 2022-12-28  发布在  PHP
关注(0)|答案(3)|浏览(301)

如何将[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;

?>
szqfcxe2

szqfcxe21#

$str = 'Hello_world!';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/-';
$result = array_reduce(str_split($str),
  fn($carry, $item)=>$carry.=$item.$chars[rand(0,strlen($chars)-1)], '');
print_r($result);

str_split将输入字符串拆分为字符,然后array_reduce使用添加的随机字符重新组合它们。

qhhrdooz

qhhrdooz2#

<?PHP
  $str =  "Hello World!";
  
  $new_string = '';
  for($i =0; $i < strlen($str); $i++){ // loop through the string
     $new_string .= $str[$i]; // add character to new string
     $new_string .= getRandomCharacter(); // add the random character to new string
  }
  echo $new_string;
  
  function getRandomCharacter(){
     $random_characters = 'abcdefghijklmnopqrstuvwxyz'
                 .'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                 .'0123456789!@#$%^&*()';
    $index= rand(0, (strlen($random_characters)- 1) ); // generates random character index from the given set.
    return $random_characters[$index];
  }
  
?>
vmjh9lq9

vmjh9lq93#

由于您的输入都是字符串,并且随机字符池只包含单字节字符,因此可以直接完成此任务,而无需数组函数和连接。
通过preg_replace_callback()调用要插入到原始字符串中每个字母后面的随机字母。
代码:(Demo

$str = 'Hello_world!';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/-';
$max = strlen($chars) - 1;

echo preg_replace_callback(
    '/.\K/',
    fn() => $chars[rand(0, $max)],
    $str
);

\K告诉regex引擎忽略先前匹配的字符,这样不会丢失任何字符--在每个字符后面的零宽度位置添加随机字母。
如果您正在处理输入数组,那么可能值得阅读Implode array with array of glue strings,了解vprintf()的巧妙技巧。

相关问题