如何将刺的字母替换为另一个分配的值



我试图在脚本中编写包含字符串的句子。 我想要实现的是用另一个分配的值替换刺痛的字母。

例:

值:a b c d e f g h i j k l m n o p q r s t u v w x y z

Assign Value:z y x w v u t s r q p o n m l k j i h g f e d c b a

每次在脚本上运行句子时,"a"分别分配给"z","b"分别分配给句子中的"y"。

输入:兄弟你好吗?

输出: sld ziv blf yilghvi?

我想用PHP编写这个脚本,请有人指出我正确的方向。

片段:

function change_text($text){
$replacement_map = array_merge(
array_combine( range('a','z'), range('z','a')),
array_combine( range('A','Z'), range('Z','A'))
);
$length = strlen($text);
for($i = 0;$i < $length; ++$i){
if(!isset($replacement_map[ $text[$i] ])) continue; // skip characters that don't require replacing
$text[$i] = $replacement_map[ $text[$i] ]; // replace current character with the desired one
}
return $text;
}

echo change_text("how are you brother?");

演示:https://3v4l.org/D1j1c

算法:

  • 上面的代码适用于小写和大写字母。
  • 我们构建一个字母字符的映射(关联数组(,其中包含所需的目标字符,如下所示:

映射(关联数组(:

array (
'a' => 'z',
'b' => 'y',
'c' => 'x',
'd' => 'w',
'e' => 'v',
'f' => 'u',
'g' => 't',
'h' => 's',
'i' => 'r',
'j' => 'q',
'k' => 'p',
'l' => 'o',
'm' => 'n',
'n' => 'm',
'o' => 'l',
'p' => 'k',
'q' => 'j',
'r' => 'i',
's' => 'h',
't' => 'g',
'u' => 'f',
'v' => 'e',
'w' => 'd',
'x' => 'c',
'y' => 'b',
'z' => 'a',
'A' => 'Z',
'B' => 'Y',
'C' => 'X',
'D' => 'W',
'E' => 'V',
'F' => 'U',
'G' => 'T',
'H' => 'S',
'I' => 'R',
'J' => 'Q',
'K' => 'P',
'L' => 'O',
'M' => 'N',
'N' => 'M',
'O' => 'L',
'P' => 'K',
'Q' => 'J',
'R' => 'I',
'S' => 'H',
'T' => 'G',
'U' => 'F',
'V' => 'E',
'W' => 'D',
'X' => 'C',
'Y' => 'B',
'Z' => 'A',
)
  • 现在,我们只需逐个字符循环$text并检查该字符是否存在于我们的地图中。如果是,我们将其替换为新的目标字符,否则保持原样并返回结果。

原因str_replace数组替换排序有问题。 所以你可以使用这个函数来做到这一点:

function change_text($text){
$search = range('a','z');
$replace = range('z','a');
$result = '';
foreach (str_split($text) as $index => $char){
if($found = array_search($char,$search)){
$result .= $replace[$found];
}else{
$result .= $char;
}
}
return $result;
}

echo change_text("how are you brother?"); // result  sld aiv blf yilgsvi?

演示

最新更新