PHP如何替换字母';A';在字母';A';不消失,数组到字符串?

PHP如何替换字母';A';在字母';A';不消失,数组到字符串?,php,Php,我用公式计算了模数学:3*n模26 通过将数组[n]A-Z加密为数字转换,从预定数组的结果获得数字的结果,然后将计算结果转换回字符串 示例:我的名字是卡尔>库纳克姆YC加斯 K=10,U=20,N=13,A=0,K=10,M=12 Y=24,C=2,G=6,A=0,Z=25,H=7 我成功地将数字转换成字符串并得到一个结果:Kuanakmaycagazz 我想问的是如何通过替换空格来删除'A',因此结果是:'KU NAKM YC GAZH'而不是'KUANAKMAYCAGAZH' 对不起,我英语

我用公式计算了模数学:3*n模26

通过将数组[n]A-Z加密为数字转换,从预定数组的结果获得数字的结果,然后将计算结果转换回字符串

示例:我的名字是卡尔>库纳克姆YC加斯

K=10,U=20,N=13,A=0,K=10,M=12

Y=24,C=2,G=6,A=0,Z=25,H=7

我成功地将数字转换成字符串并得到一个结果:Kuanakmaycagazz

我想问的是如何通过替换空格来删除'A',因此结果是:'KU NAKM YC GAZH'而不是'KUANAKMAYCAGAZH'

对不起,我英语不好

以下是我的脚本:

<?php
$text = 'MY NAME IS CARL';
$str = '';

$key = array(
"A" => 0, "B" => 1,"C" => 2, "D" => 3,"E" => 4,"F" => 5,
"G" => 6, "H" => 7, "I" => 8, "J" => 9, "K" => 10,
"L" => 11, "M" => 12, "N" => 13, "O" => 14,
"P" => 15, "Q" => 16, "R" => 17, "S" => 18,"T" => 19,
"U" => 20, "V" => 21, "W" => 22, "X" => 23,
"Y" => 24, "Z" => 25
);
for ($i = 0; $i < strlen($text); $i++) {
    $number = (3*$key[strtoupper($text[$i])])%26; // math caesar cipher 3 * n modulo 26
    $str .= array_search($number, $key);
}
echo $str;
?>

此时,当您试图查找数组中的空格时,将出现一个错误,您将收到一条消息,上面说

PHP注意:未定义索引:在

如果已打开错误报告

要解决这个问题,您可以在尝试编码字符之前检查字符是否存在于数组中,否则只需复制字符

for ($i = 0; $i < strlen($text); $i++) {
    if ( isset($key[strtoupper($text[$i])]) ) {
        $number = (3*$key[strtoupper($text[$i])])%26; // math caesar cipher 3 * n modulo 26
        $str .= array_search($number, $key);
    }
    else {
        $str .= $text[$i];
    }
}
for($i=0;$i
您可以使用内置的and函数来创建转换函数,而不是使用字符=>整数转换数组:

function translate_char($c) {
    $o = ord($c);
    if (in_array($c, range('A', 'Z'))) {
        return chr((($o - 65) * 3 % 26) + 65);
    }    
    elseif (in_array($c, range('a', 'z'))) {
        return chr((($o - 97) * 3 % 26) + 97);
    }
    else {
        return $c;
    }
}
此函数还处理小写字母字符;如果不需要,只需删除
elseif
子句即可。任何非字母的字符都会原封不动地返回

然后,您可以使用
array\u map
将此功能应用于
$text
中的所有字符:

$text = 'My name is Carl';
$str = implode('', array_map('translate_char', str_split($text)));
echo $str;
输出:

Ku nakm yc Gazh

您的代码有问题,为什么空格被a替换;这样,你就有了真实的A(要保留)和A(空格),你在问如何只删除一些A(空格),保留其他的。。。这到底是怎么做到的?我想通过把句子分成空格,而不是字母“A”来得到加密的结果,所以我想用空格来代替字母“A”。我知道凯撒密码是什么,但空格必须处理。在您的示例中,“我已成功地将数字转换为字符串并得到一个结果:Kuanakmaycagazz”示例被a替换。您如何区分那些a与正则a(a=0,因此在密码中不替换正则a)?你从一开始就错了