使用阵列str_replace

2022-08-30 10:57:55

我在使用数组时遇到一些PHP函数问题。str_replace

我有这个消息:

$message = strtolower("L rzzo rwldd ty esp mtdsza'd szdepw ty esp opgtw'd dple");

我试图像这样使用:str_replace

$new_message = str_replace(
    array('l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k'),
    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'),
    $message);

结果应该是 ,但相反,我得到.A good glass in the bishop's hostel in the devil's seatp voos vlpss xn twt qxswop's wosttl xn twt stvxl's stpt

但是,当我只尝试替换2个字母时,它会很好地替换它们:

$new_message = str_replace(array('l','p'), array('a','e'), $message);

字母 和 将被替换为 和 。lpae

如果它们的大小完全相同,为什么它不适用于完整的字母数组?


答案 1

由于str_replace() 从左到右替换,因此在执行多个替换时,它可能会替换以前插入的值。

    // Outputs F because A is replaced with B, then B is replaced with C, and so on...
    // Finally E is replaced with F, because of left to right replacements.
    $search  = array('A', 'B', 'C', 'D', 'E');
    $replace = array('B', 'C', 'D', 'E', 'F');
    $subject = 'A';
    echo str_replace($search, $replace, $subject);

答案 2

使用数组str_replace只是按顺序执行所有替换。使用 strtr 代替一次完成所有操作:

$new_message = strtr($message, 'lmnopq...', 'abcdef...');