我正在尝试使用PHP进行凯撒密码功能,但str_replace存在问题。
当我这样做时,
function evangel($data, $key) {
$alphabet = array('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');
$cryptoAlphabet = array();
for($i=0;$i<26;$i++) {
$index = $i+$key;
if($i+$key > 25) $index = (($i+$key)%25)-1;
$cryptoAlphabet[$i] = $alphabet[$index];
}
$cryptedData = str_replace($alphabet, $cryptoAlphabet, $data);
return $cryptedData;
}
它给了我这些数组;
$alphabet = Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s [19] => t [20] => u [21] => v [22] => w [23] => x [24] => y [25] => z )
$cryptoAlphabet = Array ( [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] => a )
这是我的$ data =“ aacceett”和$ key = 1的输出;
aaaaaaaa
但是当我这样做时]
function evangel($data, $key) {
$alphabet = array('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');
$cryptoAlphabet = array('z','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');
$cryptedData = str_replace($alphabet, $cryptoAlphabet, $data);
return $cryptedData;
}
数组是手动声明的,但是这一次,例如,当我的$ data =“ ffddss”;]]
eeccrr
输出正确。为什么当我自动更改字母数组时,str_replace函数不起作用?
我正在尝试使用PHP进行凯撒密码功能,但str_replace存在问题。当我这样做时,函数evangel($ data,$ key){$ alphabet = array('a','b','c','d','e','f','g', 'h','...
您的crytpo字母在每种情况下都是不同的。在第一种情况下,[0]
元素为b
,在第二种情况下为z
。您的代码会产生它执行的结果,因为-例如-当它看到a
时,将其替换为b
,然后看到b
的替换项是c
,因此它执行了该操作,依此类推直到它遍历整个数组为止,最终以z
替换为a
,因此输出中的所有字符都变为a
。在您的第二种情况下,a
被转换为z
(然后将其转换为y
),但是所有其他字符都被替换为数组中较早的字符,因此不会再次被替换。