/ / php str_replace - php, string

php str_replace - php, string

Eu estou usando este código para fazer criptografia simples:

    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;
}

é suposto obter um número e substituí-lo pelo número correto de $ replace array. Eu estou inserindo "234" e tenho "441" para uma resposta, onde eu deveria ter "391".
alguma sugestão ?

Respostas:

2 para resposta № 1

O problema é que str_replace está sendo aplicado repetidamente, para cada elemento na matriz.

Para "234", o primeiro 2 está sendo substituído por 3 e, em seguida, 3 está sendo substituído por 9 e, em seguida, 9 está sendo substituído por 4.

O 3 está sendo substituído por 9 e, em seguida, o 9 é substituído por 4.

Finalmente, o 4 está sendo substituído por 1, criando "441".


1 para resposta № 2

O bit importante é encontrado nos documentos do str_replace função:

Choca de ordem de substituição

Como str_replace () substitui da esquerda para a direita, ele pode substituir um valor inserido anteriormente ao fazer várias substituições. Veja também os exemplos neste documento.

Para o seu simples "criptografia", você quer usar o PHP "s strtr função:

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

nb. Por favor, não cozinhe suas próprias funções de "criptografia" Use algoritmos e bibliotecas estabelecidos e bem testados.


1 para resposta № 3

Tente usar strtr em vez de. Você precisará alterar seu código para ter:

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

E isso é se dar bem com a pegadinha de str_replace.