diff --git a/reference/strings/functions/strtr.xml b/reference/strings/functions/strtr.xml index 1c552fc7f6..0a1e2e0b33 100644 --- a/reference/strings/functions/strtr.xml +++ b/reference/strings/functions/strtr.xml @@ -3,7 +3,7 @@ strtr - Translate certain characters + Translate characters or replace substrings @@ -20,15 +20,34 @@ arrayreplace_pairs - This function returns a copy of str, - translating all occurrences of each character in - from to the corresponding character in - to. + If given three arguments, this function returns a copy of + str where all occurrences of each (single-byte) + character in from have been translated to the + corresponding character in to, i.e., every + occurrence of $from[$n] has been replaced with + $to[$n], where $n is a valid + offset in both arguments. - If from and to are + If from and to have different lengths, the extra characters in the longer of the two - are ignored. + are ignored. The length of str will be the same as + the return value's. + + + If given two arguments, the second should be an array in the + form array('from' => 'to', ...). The return value is + a string where all the occurrences of the array keys have been + replaced by the corresponding values. The longest keys will be tried first. + Once a substring has been replaced, its new value will not be searched + again. + + + In this case, the keys and the values may have any length, provided that + there is no empty key; additionaly, the length of the return value may + differ from that of str. + However, this function will be the most efficient when all the keys have the + same size. @@ -64,8 +83,8 @@ replace_pairs - The replace_pairs parameter may be used as a substitute for - to and from in which case it's an + The replace_pairs parameter may be used instead of + to and from, in which case it's an array in the form array('from' => 'to', ...). @@ -94,6 +113,8 @@ ]]> @@ -101,20 +122,17 @@ $addr = strtr($addr, "äåö", "aao"); - strtr may be called with only two - arguments. If called with two arguments it behaves in a new way: - from then has to be an array that contains - string -> string pairs that will be replaced in the source - string. strtr will always look for the - longest possible match first and will *NOT* try to replace stuff - that it has already worked on. + The next example shows the behavior of strtr when + called with only two arguments. Note the preference of the replacements + ("h" is not picked because there are longer matches) + and how replaced text was not searched again. <function>strtr</function> example with two arguments "hi", "hi" => "hello"); +$trans = array("h" => "-", "hello" => "hi", "hi" => "hello"); echo strtr("hi all, I said hello", $trans); ?> ]]> @@ -123,6 +141,31 @@ echo strtr("hi all, I said hello", $trans); + + + + The two modes of behavior are substantially different. With three arguments, + strtr will replace bytes; with two, it may replace + longer substrings. + + + <function>strtr</function> behavior comparison + + "01"); +echo strtr("baab", $trans); +?> +]]> + + &example.outputs; + +