strtr
がstr_replace
よりも望ましい場合、またはその逆の場合を理解するのに苦労しています。部分文字列が置換される順序は逆になりますが、どちらの関数を使用してもまったく同じ結果を得ることができるようです。例えば:
echo strtr('test string', 'st', 'XY')."\n";
echo strtr('test string', array( 's' => 'X', 't' => 'Y', 'st' => 'Z' ))."\n";
echo str_replace(array('s', 't', 'st'), array('X', 'Y', 'Z'), 'test string')."\n";
echo str_replace(array('st', 't', 's'), array('Z', 'Y', 'X'), 'test string');
この出力
YeXY XYring
YeZ Zring
YeXY XYring
YeZ Zring
構文とは別に、一方を他方よりも使用することに利点はありますか?希望する結果を得るのに十分ではない場合はありますか?
最初の違い:
strtr
とstr_replace
の異なる動作の興味深い例は、PHP Manual:
<?php
$arrFrom = array("1","2","3","B");
$arrTo = array("A","B","C","D");
$Word = "ZBB2";
echo str_replace($arrFrom, $arrTo, $Word);
?>
これを機能させるには、代わりに「strtr」を使用します。
<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$Word = "ZBB2";
echo strtr($Word,$arr);
?>
つまり、str_replace
は置換に対するよりグローバルなアプローチであり、strtr
は文字を1つずつ変換するだけです。
別の違い:
次のコードが与えられた場合( PHP文字列置換速度の比較 から取得):
<?php
$text = "PHP: Hypertext Preprocessor";
$text_strtr = strtr($text
, array("PHP" => "PHP: Hypertext Preprocessor"
, "PHP: Hypertext Preprocessor" => "PHP"));
$text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor")
, array("PHP: Hypertext Preprocessor", "PHP")
, $text);
var_dump($text_strtr);
var_dump($text_str_replace);
?>
結果のテキスト行は次のようになります。
string(3) "PHP"
string(27) "PHP:ハイパーテキストプリプロセッサ"
主な説明:
これは次の理由によります。
strtr:パラメータを長さで降順でソートします:
str_replace:キーが定義されている順序で動作するため、
「PHP:ハイパーテキストプリプロセッサ:ハイパーテキストプリプロセッサ」。
次に、前の手順の結果のテキストで次のキー「PHP:Hypertext Preprocessor」を見つけるため、結果として「PHP」に置き換えられます。
「PHP:Hypertext Preprocessor」。
探すキーはもうないので、置換はそこで終わります。
どちらの関数を使用してもまったく同じ結果を達成できる可能性があるようです
それは常に真実であるとは限らず、提供する検索および置換データに依存します。 2つの関数が異なる例については、以下を参照してください: PHP str_replaceには13文字を超える制限がありますか?
strtr
は、すでに置換されている文字列の一部を置換しません- str_replace
は、内部置換を置換します。strtr
は、2つのパラメーターで呼び出す場合、最初に最長のキーで始まります。str_replace
は左から右に置き換えます。str_replace
は実行された置換の数を返すことができます-strtr
はそのようなカウント値を提供しません。strtr
は、2つの引数と共に使用すると、より柔軟で条件付きの置換を提供すると思います。たとえば、stringが1の場合はaに、stringが10の場合はbに置き換えます。このトリックは、strtr
によってのみ達成できました。
$string = "1.10.0001";
echo strtr($string, array("1" => "a", "10" => "b"));
// a.b.000a
Php Manual Strtr を参照してください。
マニュアルSTRTRの注意-説明string strtr(string $ str、string $ from、string $ to)string strtr(string $ str、array $ replace_pairs)3つの引数が与えられた場合、この関数はcopyを返しますstrの...
STR_REPLACE-- ...検索または置換が配列の場合、その要素は処理されます最初から最後まで。 ...
STRTRはそれぞれ次の効果を無効にしますが、STR_REPLACEは有効です。