46

str_replace配列を使用する場合、PHP 関数に問題があります。

次のメッセージがあります。

$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 seat、代わりに が得られp voos vlpss xn twt qxswop's wosttl xn twt stvxl's stptます。

ただし、2文字だけを置き換えようとすると、うまく置き換えられます。

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

文字landはandpに置き換えられます。ae

両方がまったく同じサイズである場合、完全なアルファベット配列で機能しないのはなぜですか?

4

5 に答える 5

57

str_replace() は左から右に置換するため、複数の置換を行うと、以前に挿入された値を置換する可能性があります。

    // A が B に置き換えられ、次に B が C に置き換えられるため、F が出力されます...
    // 最後に、左から右への置換のため、E が F に置き換えられます。
    $search = array('A', 'B', 'C', 'D', 'E');
    $replace = array('B', 'C', 'D', 'E', 'F');
    $subject = 'A';
    echo str_replace($search, $replace, $subject);
于 2012-12-05T03:38:26.667 に答える
42

str_replacewith arrays は、すべての置換を順番に実行するだけです。strtr代わりに使用して、それらをすべて一度に実行します。

$new_message = strtr($message, 'lmnopq...', 'abcdef...');
于 2012-12-05T03:30:19.180 に答える
23

簡単でより良いstr_replace

<?php
$arr = array(
    "http://" => "http://www.",
    "w" => "W",
    "d" => "D");

    $word = "http://desiweb.ir";
    echo strtr($word,$arr);
?>

strtrPHPドキュメント はこちら

于 2016-02-06T14:57:16.423 に答える