How to replace a letter in a string with a new letter that will not be updated

风格不统一 提交于 2019-11-27 08:25:00

问题


Lets say I have some code:

$text = $_POST['secret'];

$replaces = array(
        'a' => 's',
        'b' => 'n',
        'c' => 'v',
        'd' => 'f',
        'e' => 'r',
        'f' => 'g',
        'g' => 'h',
        'h' => 'j',
        'i' => 'o',
        'j' => 'k',
        'k' => 'l',
        'l' => 'a',
        'm' => 'z',
        'n' => 'm',
        'o' => 'p',
        'p' => 'q',
        'q' => 'w',
        'r' => 't',
        's' => 'd',
        't' => 'y',
        'u' => 'i',
        'v' => 'b',
        'w' => 'e',
        'x' => 'c',
        'y' => 'u',
        'z' => 'x',

                    );
    $text = str_replace(array_keys($replaces),array_values($replaces),$text);

echo "You're deciphered message is: ".$text;
}

?>

<form action="" method="post">
<p>Enter the secret message: <input name="secret" type="text"/></p>
<input class="button" type="submit" name="submit" value="Submit"/>

</form

Here, a user inputs a secret message, and then the characters are replaced by new characters. For every letter on a keyboard it is replaced with the letter to the right.

eg. if a user enters "gwkki" the output will be "hello". However the above code outputs aeaae and NOT hello. It outputs "aeaae". This is because the letter h changes to j, then j changes to k, then k changes l, then l changes to a. and so on with the other letters. Is there any way for the text to be scanned and changed once??


回答1:


In the PHP Manual it's clearly explained your problem, at the end of the page they advice to use strtr() which does exactly what you want.

Replace

  $text = str_replace(array_keys($replaces),array_values($replaces),$text);

with

  $text = strtr($text,$replaces);

which does exactly what you want, it replaces one character with another character.

The documentation of strtr() is here: http://www.php.net/manual/en/function.strtr.php




回答2:


<?php
$text = $_POST['secret'];

$replaces = array(
    'a' => 's',
    'b' => 'n',
    'c' => 'v',
    'd' => 'f',
    'e' => 'r',
    'f' => 'g',
    'g' => 'h',
    'h' => 'j',
    'i' => 'o',
    'j' => 'k',
    'k' => 'l',
    'l' => 'a',
    'm' => 'z',
    'n' => 'm',
    'o' => 'p',
    'p' => 'q',
    'q' => 'w',
    'r' => 't',
    's' => 'd',
    't' => 'y',
    'u' => 'i',
    'v' => 'b',
    'w' => 'e',
    'x' => 'c',
    'y' => 'u',
    'z' => 'x',
);

for( $i=0,$l=strlen($text);$i<$l;$i++ ){
    if( isset($replaces[$text[$i]]) ){
        $text[$i] = $replaces[$text[$i]];
    }
}

echo "You're deciphered message is: ".$text;

?>

<form action="" method="post">
<p>Enter the secret message: <input name="secret" type="text"/></p>
<input class="button" type="submit" name="submit" value="Submit"/>

</form>



回答3:


this will be your solution

   $text1 = '';
   for($i=0; $i<strlen($text); $i++)  {
     $text1 .= $replaces[$text[$i]];
   }

   echo $text1;

or else you can use like this

$text = strtr($text,$replaces);


来源:https://stackoverflow.com/questions/8604550/how-to-replace-a-letter-in-a-string-with-a-new-letter-that-will-not-be-updated

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!