- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我很难理解何时 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 手册的注释部分:
<?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
只是逐个转换字符。
另一个区别:
给出以下代码(取自 PHP String Replacement Speed Comparison):
<?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: Hypertext Preprocessor"
主要解释:
发生这种情况是因为:
strtr:它按长度对参数进行降序排序,所以:
str_replace:它按照定义键的顺序工作,所以:
“PHP: Hypertext Preprocessor: Hypertext Preprocessor”.
然后它在前一步的结果文本中找到下一个键:“PHP:超文本预处理器”,因此将其替换为“PHP”,结果为:
“PHP: Hypertext Preprocessor”.
没有更多要查找的键,因此替换到此结束。
关于php - 何时使用 strtr 与 str_replace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177296/
当前代码仅将空格替换为破折号(-) $url = str_replace(' ','-',$url); 我只想在 URL 中使用字母、数字和破折号 (-)。 让我知道技巧。 最佳答案 你想要这个来生成
$str 是 foreach 中的某个值。 $str = str_replace('_name_','_title_',$str); 如何制作if str_replace? 我想做的事情 if hav
strtr 有两种形式: string strtr ( string $str , string $from , string $to ) string strtr ( s
str_replace — 子字符串替换 [str_replace] mixed str_replace ( mixed $search
我试图在回显之前从文本中删除句点和逗号之前的所有空格。 文本可能看起来像这样,并且到处都有空格。 Bla bla bla... 这是我的代码,尽管它成功删除了任何 () 并将其替换为“无”: $str
我有一个看起来很简单的查询。我在 PHP 中有以下代码: $newThumb = str_replace('style="width:170px;"','',$nolinkThumb); 我遇到的问题
您好! 我从 .xlsx 文件中获取字符串 ->"N°X" 我想用 Num_X 替换 "N°" 我正在尝试用 $var = str_replace("N°","Num_",$var); 但没有任何东西
我正在尝试仅获取视频文件的持续时间。 我将使用 ffmpeg 抓取任何长度的视频文件的精确 10 个缩略图。 为此,我需要找出持续时间,然后除以 10 来做 ffmpeg。 结果是一样的。 str_r
我正在使用 str_replace,但它无法正常工作。我有一个文本区域,输入是用表单发送的。当服务器接收到数据时,我想将新行更改为“,”。 $teams = $_GET["teams"]; $team
我已经研究过并且需要找到用一系列随机可能性替换需求的最佳方法。 即: $text = "Welcome to [city]. I want [city] to be a random version
这是我试图用“-”替换单词之间的空格的字符串。 $mystring = "Color red, Color blue, Color black"; $newstring = str_replace('
我需要打开一个文件,替换一些内容(12345 为 77348)并保存。据我所知 $cookie_file_path=$path."/cookies/shipping-cookie".$unique;
奇怪,我一定是漏掉了什么。 $city = "vancouver"; $insert1 = "https://www.site.ca/buy/vancouver/28130965/"; $url
我在将数组返回到指定字符串时遇到了问题。所以,这是我尝试过的代码。 $setValues = array("test1", "test2", "testurl"); $change = join("'
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛适用,visit the h
如何使用str_replace但在搜索字符串时不区分大小写? 例如,假设我想替换 ABcD与 a 。生成的命令将是 $string=str_replace("ABcD","a",$string); 。
我正在循环浏览表格中的标题,因此它本质上是这样的。 foreach($c as $row){ echo string_shorten($row['title']); } 我正在尝试使用一个 s
我正在尝试在 PHP 中进行重音字符替换,但得到的结果很奇怪,我的猜测是因为我使用的是 UTF-8 字符串,而 str_replace 无法正确处理多字节字符串。 $accents_search
$a = $_GET['a']; $d = array("æ", "ø", "å", "Æ", "Ø", "Å"); $e = array("æ", "ø", "å",
我有一个简单的 PHP 脚本,应该用反斜杠转义单引号和双引号。这是我的代码: $output = str_replace('"','\"',$input); $output = str_replace
我是一名优秀的程序员,十分优秀!