php str_replace

时间:2012-04-30 16:28:06

标签: php string

我正在使用此代码进行简单加密:

    function idEncrypt($string)
{
    $multiply = 2457;
    $original = array('1', '2','3', '4', '5', '6', '7', '8', '9', '0');
    $replace = array('6', '3', '9', '1', '2', '8', '5', '0', '4', '7');
    $idEncrypt = str_replace($original, $replace, $string);
    //$idEncrypt = $idEncrypt * $multiply;
    return $idEncrypt;      
}

它应该取一个数字,并用$ replace数组中的正确数字替换它。 我正在输入“234”,得到“441”的答案,我应该得到“391”。
有什么建议吗?

3 个答案:

答案 0 :(得分:2)

问题在于,对于数组中的每个元素,反复应用str_replace

对于'234',前2替换为3,然后3替换为9,然后9替换为4.

3替换为9,然后9替换为4。

最后,4被替换为1,创建'441'。

答案 1 :(得分:1)

重要的一点可以在str_replace函数的文档中找到:

  

替换订单问题

     

因为str_replace()从左向右替换,所以在执行多次替换时,它可能会替换先前插入的值。另请参阅本文档中的示例。

对于简单“加密”,您希望使用PHP的strtr函数:

function transform($string) {
  $original = '1234567890';
  $replace = '6391285047';
  return str_replace($string, $original, $replace);
}

NB。请不要自己做“加密”功能。使用经过充分测试的成熟算法和库。

答案 2 :(得分:1)

请尝试使用strtr。您需要将代码更改为:

$original = "1234567890";
$replace = "6391285047";

这就是绕过str_replace的问题。