str_replace 配列 質問する

str_replace 配列 質問する

配列を使用するときにPHP 関数で問題が発生しますstr_replace

次のようなメッセージがあります:

$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);

文字lとは とpに置き換えられます。ae

両方のサイズがまったく同じなのに、アルファベット配列全体で動作しないのはなぜですか?

ベストアンサー1

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

    // A が B に置き換えられ、次に B が C に置き換えられ、というように繰り返されるため、F が出力されます。
    // 左から右への置換により、最終的に E は F に置き換えられます。
    $search = 配列('A', 'B', 'C', 'D', 'E');
    $replace = 配列('B'、'C'、'D'、'E'、'F');
    $subject = 'A';
    echo str_replace($search, $replace, $subject);

おすすめ記事