配列を使用するときに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
に置き換えられます。a
e
両方のサイズがまったく同じなのに、アルファベット配列全体で動作しないのはなぜですか?
ベストアンサー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);