and*_*ber 81 php string strtr str-replace
我很难理解什么时候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');
Run Code Online (Sandbox Code Playgroud)
这输出
YeXY XYring
YeZ Zring
YeXY XYring
YeZ Zring
Run Code Online (Sandbox Code Playgroud)
除了语法之外,使用one还是其他有什么好处吗?任何人不足以达到预期结果的情况?
Nic*_*ica 128
第一个区别:
之间不同的行为的一个有趣的例子strtr,并str_replace在PHP手册的注释部分:
<?php
$arrFrom = array("1","2","3","B");
$arrTo = array("A","B","C","D");
$word = "ZBB2";
echo str_replace($arrFrom, $arrTo, $word);
?>
Run Code Online (Sandbox Code Playgroud)
要使其工作,请使用"strtr"代替:
<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
Run Code Online (Sandbox Code Playgroud)
这意味着这str_replace是一种更全球化的替代方法,同时strtr只是逐个翻译字符.
另一个区别:
给出以下代码(取自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);
?>
Run Code Online (Sandbox Code Playgroud)
生成的文本行将是:
string(3)"PHP"
字符串(27)"PHP:Hypertext Preprocessor"
主要解释:
这是因为:
strtr:它按长度按降序对其参数进行排序,因此:
str_replace:它按键定义的顺序工作,因此:
"PHP:超文本预处理器:超文本预处理器".
然后它在前一步的结果文本中找到下一个键:"PHP:Hypertext Preprocessor",因此它被"PHP"替换,结果如下:
"PHP:超文本预处理器".
没有更多的钥匙需要寻找,所以更换到那里结束.
hak*_*kre 18
看起来使用任一函数都可以获得完全相同的结果
这并不总是正确的,取决于您提供的搜索和替换数据.例如,两个函数的区别在于:PHP str_replace是否具有大于13个字符的限制?
strtr将不会替换已经被替换的字符串部分 - str_replace将替换内部替换.strtr如果您使用两个参数调用它,将从最长的键开始 - str_replace将从左到右替换.str_replace可以返回完成的替换次数 - strtr不提供这样的计数值.小智 6
我认为strtr在使用两个参数时提供更灵活和条件替换,例如:如果string为1,则替换为a,但如果string为10,则替换为b.这个伎俩只能通过实现strtr.
$string = "1.10.0001";
echo strtr($string, array("1" => "a", "10" => "b"));
// a.b.000a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32952 次 |
| 最近记录: |