停止 str_replace() 替换替换项[重复]

问题描述 投票:0回答:3

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

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”。

有什么建议吗?

php string replace
3个回答
1
投票

问题在于,对于数组中的每个元素,

str_replace
被一遍又一遍地应用。

对于“234”,首先将 2 替换为 3,然后将 3 替换为 9,然后将 9 替换为 4。

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

最后,4 被替换为 1,形成“441”。


1
投票

重要的一点可以在

str_replace
函数的文档中找到:

更换订单陷阱

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

对于您的简单“加密”,您想使用PHP的

strtr
函数:

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

nb。请不要自行编写“加密”功能。使用已建立的、经过充分测试的算法和库。


1
投票

尝试使用

strtr
代替。您需要更改代码才能:

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

这就解决了

str_replace
的问题。

© www.soinside.com 2019 - 2024. All rights reserved.