(PHP 4, PHP 5, PHP 7, PHP 8)
strtr — 转换字符或替换字串
替代签名(不支持命名参数):
如果指定三个参数,则该函数返回 string
的副本,from
中所有出现的每个(单字节)字符都已转换为 to
中的相应字符。例如,每次出现的
$from[$n]
都会替换为 $to[$n]
,$n
是两个参数中的有效位移(offset)。
如果 from
与 to
长度不相等,那么忽略两者中较长的多余字符。string
的长度将与返回的长度一样。
如果指定两个参数,则第二个参数应该是 array('from' => 'to', ...)
形式的 array。返回值是
string,数组中所有所有出现的键都替换为相应的值。首先会尝试最长的键。一旦子字符串被替换,则新值将不会再次搜索。
在这种情况下,键和值可以是任意长度,前提是没有空值的键;另外,返回值的长度可以跟 string
的长度不同。但是,当所有键的长度相同时,函数最有效。
返回转换后的 string。
示例 #1 strtr() 示例
<?php
// 在这种形式中,strtr() 进行逐字节转换
// 因此,假设这里是单字节编码:
$addr = strtr($addr, "äåö", "aao");
?>
下面的示例展示了仅使用两个参数调用 strtr() 的行为。注意优先替换(没有选择
"h"
,因为有更长的匹配项)以及不再搜索已替换的文本。
示例 #2 使用两个参数的 strtr() 示例
<?php
$trans = array("h" => "-", "hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>
以上示例会输出:
hello all, I said hi
两种行为的模式本质上是不同的。使用三个参数,strtr() 将按字节替换;使用两个参数,优先替换更长的子字符串,
示例 #3 strtr() 行为比较
<?php
echo strtr("baab", "ab", "01"),"\n";
$trans = array("ab" => "01");
echo strtr("baab", $trans);
?>
以上示例会输出:
1001 ba01