web-dev-qa-db-ja.com

str_replaceと配列

配列を使用するときにPHP function 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);

lpの文字は、aeに置き換えられます。

両方が完全に同じサイズである場合、完全なアルファベット配列で動作しないのはなぜですか?

37
LautaroAngelico

str_replace 配列では、すべての置換を順番に実行します。代わりに strtr を使用して、一度にすべてを実行します。

$new_message = strtr($message, 'lmnopq...', 'abcdef...');
36
Ry-

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

str_replaceより簡単で優れています:

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

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

strtr PHP dochere

16
desiweb.ir

正解としてマークされた答えの代わりに、文字の代わりに単語を置き換える必要がある場合は、次のコードでそれを行うことができます:

$query = "INSERT INTO my_table VALUES (?, ?, ?, ?);";
$values = Array("Apple", "oranges", "mangos", "papayas");
foreach (array_fill(0, count($values), '?') as $key => $wildcard) {
    $query = substr_replace($query, '"'.$values[$key].'"', strpos($query, $wildcard), strlen($wildcard));
}
echo $query;

デモはこちら: http://sandbox.onlinephpfunctions.com/code/56de88aef7eece3d199d57a863974b84a7224fd7

2
TwystO