strtr と str_replace: 異なる置換関数を使用する場合
PHP では、strtr 関数と str_replace 関数の両方で文字列置換を実行できます。ただし、適切な関数の選択は、特定の要件と使用例によって異なります。
置換順序のコントラスト
結果の出力は場合によっては同一に見えることがありますが、 2 つの関数の微妙な違い:
echo strtr('test string', 'st', 'XY'); // "YeXY XYring" echo str_replace(array('s', 't'), array('X', 'Y'), 'test string'); // "YeXY XYring"
strtr は部分文字列を右から左に置換し、str_replace は左から右に置換します。この違いは、重複する部分文字列を置換するときに明らかになります。
echo strtr('1 2 3 3', '1 2 3', 'XYZ'); // "1 2 3 Z" echo str_replace(array('1 2 3', '1 2'), array('XYZ', 'AB'), '1 2 3 3'); // "ABXYZ"
配列キーの置換と複数の部分文字列
もう 1 つの違いは、置換配列の処理方法です。
$arr = array("1" => "A", "2" => "B", "3" => "C"); echo strtr('123', $arr); // "ABC" echo str_replace(array_keys($arr), array_values($arr), '123'); // "ABC"
この場合、どちらの関数も文字を対応する配列値に置き換えます。ただし、strtr にはキーと値のペアを含む連想配列が必要ですが、str_replace は部分文字列と置換の単純な配列を操作できます。
置換の優先順位
strtr は、次の条件に基づいて置換の優先順位を付けます。置換される部分文字列の長さ (降順)。対照的に、str_replace は、置換配列で定義された順序で置換を処理します。次の例に示すように、これにより異なる結果が生じる可能性があります。
$text = "PHP: Hypertext Preprocessor"; $text_strtr = strtr($text, array("PHP: Hypertext Preprocessor" => "PHP", "PHP" => "PHP: Hypertext Preprocessor")); $text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor"), array("PHP: Hypertext Preprocessor", "PHP"), $text); var_dump($text_strtr); // string(3) "PHP" var_dump($text_str_replace); // string(27) "PHP: Hypertext Preprocessor"
結論として、strtr と str_replace はどちらも、PHP での文字列置換に対して異なるアプローチを提供します。動作と構文における微妙なニュアンスを理解すると、特定の使用例に適切な関数を選択することができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3