strtr(string, from, to):

逐个字符开始替换,以from跟to中长度较较短的一个为准,例如:

strtr("aidengni","ai","b")   只替换原始字符串中出现的a 输出:bidengni

strtr("aidengni","a","bu")  只替换原始字符串中出现的a 输出:bidengni

此函数是大小写敏感的,具如果发生多次替换,每一次替换的蓝本都是最原始的那个字符串,而不是在前一次替换的基础上替换,如

strtr("aidengni","aA","A@") 会输出Aidenliu 而不是@idengni

strtr(string, array):

array为关联数组,用关联数组中的值替换原始字符串中出现的对应的键,若发生多次替换,每次替换的对像都是最原始的那个字符串,而不是在前一次替换的基础上替换(此点与str_replace不同)

strtr(string, from, to)与 strtr(string, array)之间的区别:

  • strtr(string, from, to)是逐个字符替换,而strtr(string, array)是字符串替换
  • strtr("aidengni","ai","") 不发生替换(第二个参数为零长度字符串)
  • strtr("aidengni",array("ai"=>"")) 发生替换

实例说明:

#EXAMPLE1

<?php
echo strtr("I Love You", "Lo", "LO");

输出结果:

I LOve YOu

说明:

  • strtr()区分大小写
  • 字符进行逐个替换
  • strtr的替换是很特殊的,你注意看后面那个YOu,中间的O被替换的,这显然不是我们的本意。

#EXAMPLE2

<?php
echo strtr("I Love You", "Lo", "")."<br>";
echo strtr("I Love You", "o"," ");

输出结果:

I Love You

I L ve Y u

说明:

  • to参数为空或空字符串的时候什么也不会发生改变
  • to参数可以为空白字符

#EXAMPLE3

<?php
echo str("aidengni,I Love You", array('ai'=>'bu', 'Love'=>'like'));

输出结果:

budengni,I like You

说明

  • 实现的是字符串替换
  • 字符串中的字符按关联数组中键名替换成键值

#EXAMPLE4 更替字符串技巧

$str_change = array("ai"=>"bu");
$str_change += array("I"=>"Me");
$str_change += array("You"=>"You Too");
echo strtr("aidengni,I Love You", $str_change);

输出结果:

budengni,Me Love You Too

说明:

需要替换什么就往数组里添加对应的键值对

#***#

  • strtr(string, from, to) 适用于通篇字符替换
  • strtr(string, array) 适用于指定字符串替换
  • strtr() 不建议以少换多的替换
  • strtr() 的运行速度比str_replace()快3~4倍

str_replace(find,replace,string,count)

以其他字符替换字符串中的一些字符(区分大小写)

该函数必须遵循下列规则:

  • 如果搜索的字符串是数组,那么它将返回数组。
  • 如果搜索的字符串是数组,那么它将对数组中的每个元素进行查找和替换。
  • 如果同时需要对数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余元素将用空字符串进行替换
  • 如果查找的是数组,而替换的是字符串,那么替代字符串将对所有查找到的值起作用。

注释:该函数区分大小写。请使用 str_ireplace() 函数执行不区分大小写的搜索。

参数 描述
find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
count 可选。对替换数进行计数的变量。

实例:

#EXAMPLE1

带count 统计参数

<?php
$str_rp = "aidengni,I Love You";
echo str_replace("ai", "bu",$str_rp,$i);
echo '<br>'.$i;

输出结果:

budengni,I Love You
1

#EXAMPLE2

需要执行替换的元素少于查找到的元素的数量

<?php
$str_rp_array = array('I', 'Love', 'You');
print_r(str_replace(array('I', 'You'), array('Me'), $str_rp_array));

输入结果:

Array ( [0] => Me [1] => Love [2] => )

说明:

多余元素被空字符串进行替换,"You " 被 空字符串替换了

#***#

  • strtr(string, array())常用于替换字符串
  • str_replace(find, replace, string ,count) 常用语替换数组元素和统计替换的次数

  

substr_replace(string, replacement, start, length)

把字符串的一部分替换为另一个字符串

如果 start 参数是负数且 length 小于或者等于 start,则 length 为 0

参数 描述
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start

必需。规定在字符串的何处开始替换。

  • 正数 - 在字符串中的指定位置开始替换
  • 负数 - 在从字符串结尾的指定位置开始替换
  • 0 - 在字符串中的第一个字符处开始替换
length

可选。规定要替换多少个字符。默认是与字符串长度相同。

  • 正数 - 被替换的字符串长度
  • 负数 - 表示待替换的子字符串结尾处距离 string 末端的字符个数。
  • 0 - 插入而非替换

实例

#EXAMPLE1

<?php
$str_rp = "aidengni,I Love You";
echo substr_replace($str_rp,'You Too',strpos($str_rp,'You'));

输出结果:

aidengni,I Love You Too

说明:

  • strpos($str_rp,'You') 获取 子字符串'You' 第一次出现的位置

#EXAMPLE2

插入字符串

<?php
$str_rp = "aidengni,I Love You";
echo substr_replace($str_rp,'Don\'t ',-8, 0);

输出结果:

aidengni,I Don't Love You

说明:

  • start 参数为负数,表示从字符串的末尾向前读取的位置
  • length 参数为0 ,表示在指定位置插入字符串

#***#

  • substr_replace() 通常用于字符串插入操作
  • substr_replace() 常用于需要替换的字符串较长的情况

preg_replace(pattern , replacement, subject,limit,count )

正则替换,搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。

参数说明:

  • pattern: 要搜索的模式,可以是字符串或一个字符串数组。

  • replacement: 用于替换的字符串或字符串数组。

  • subject: 要搜索替换的目标字符串或字符串数组。

  • limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。

  • count: 可选,为替换执行的次数。

返回值

如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。

如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。

#EXAMPLE

使用基于数组索引的搜索替换

$str_rp = "aidengni,I Love You";
//替换多个字符串
$pattern_array = array();
$pattern_array[0] = "/ai/";
$pattern_array[1] = "/You/";
$replacement_array = array();
$replacement_array[0] = "bu";
$replacement_array[1] = "You Too";
echo preg_replace($pattern_array, $replacement_array, $str_rp);

输出结果

budengni,I Love You Too

#***#

执行效率问题

  • strtr() 最快
  • str_replace() 次之
  • preg_replace() 最慢,一般很少用

strtr、str_replace()、substr_replace、preg_replace之间的区别的更多相关文章

  1. select、poll、epoll之间的区别总结

    select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...

  2. 你真的会玩SQL吗?EXISTS和IN之间的区别

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  3. [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别

    要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...

  4. iOS中assign,copy,retain之间的区别以及weak和strong的区别

    @property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...

  5. javascrip中parentNode和offsetParent之间的区别

    首先是 parentNode 属性,这个属性好理解,就是在 DOM 层次结构定义的上下级关系,如果元素A包含元素B,那么元素B就可以通过 parentElement 属性来获取元素A. 要明白 off ...

  6. 面试问题5:const 与 define 宏定义之间的区别

    问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同     define宏是在预处理阶段展开:     const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...

  7. 关于背景图相对父容器垂直居中问题 —— vertical-align 和 line-height 之间的区别

       html css <div class="register-wrapper"> <div class="register"> &l ...

  8. 转:WCF、WebAPI、WCFREST、WebService之间的区别

    WCF.WebAPI.WCFREST.WebService之间的区别   注明:转载 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API ...

  9. 深入理解 '0' "0" '\0' 0 之间的区别

    看来基础还是很重要的,基础不扎实就难以学好c语言,就别说写出高质量的c语言代码了.今天,我就被这个问题折磨的不行了,哈哈,不过现在终于明白了‘\0’ ,‘0’, “0” 之间的区别了.困惑和快乐与你分 ...

随机推荐

  1. 获取当前页面的所有链接的四种方法对比(python 爬虫)

    ''' 得到当前页面所有连接 ''' import requests import re from bs4 import BeautifulSoup from lxml import etree fr ...

  2. PDO访问方式操作数据库

    mysqli是专门访问MySQL数据库的,不能访问其它数据库.PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对应的数据库.mysqli是一个 ...

  3. 9-[CSS]-字体、文本、背景图片

    1.字体相关CSS属性介绍 p{ width: 300px; height: 60px; /* 等价于 font-size: 14px; line-height: 30px; font-family: ...

  4. 7-[CSS]-css介绍,引入方式

    1.CSS介绍:层叠样式表(Cascading Style Sheets) 我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前 ...

  5. 解决 java循环中使用 Map时 在put值时value值被覆盖的问题

    其实很简单,只需要把容器换成list 然后在循环中,每次循环末尾map = new HashMap() 或者直接在循环中一开始就实例化hashmap(Map map = new HashMap();) ...

  6. SSIS 容器

    容器(Container)是控制流的特殊的任务(Task),它为一个或多个Task提供逻辑组合,可以实现工作流的重复执行和顺序执行,还可以把变量和事件处理程序的作用域缩小到容器中.不能在容器内的Tas ...

  7. 【linux报错】安装好虚拟机后,挂载光盘报错:mount:you must specify the filesystem type

    问题现象: 问题原因: 当时光盘的“已连接”的勾没有勾上 解决后:

  8. 常见面试算法题JS实现-仅用递归函数和栈操作逆序一个栈

    前言: 因为JAVA和JS语言特性的不同,有些东西在JAVA中可能需要一些技巧和手段才能实现的复杂程序,但是在JS中可能就是天然存在的,所以这套书里面的题目不会全部用JS去实现一遍,因为可能JS的实现 ...

  9. android 图片二维码识别和保存(二)

    续上一篇,开发图片二维码识别功能后,我们对功能进行性能分析内存占用显著提高了,不使用该功能内存占用大约是147M,使用这个功能多次以后,高达203M. 因此对功能进行研究,发现每次生成的图片没有即时的 ...

  10. jQuery的$ .ajax防止重复提交的方法

    没啥说的直接贴代码,很简单: 第一种方式:的onclick点击事件类型 <SCRIPT> function member_del(obj,id){ var lock = false; // ...