常用的PHP字符串操作函数
1.strlen

但是要注意!如果字符串中是汉字等其他字符时候呢?
$str = "我";
echo strlen($str); //一个汉字,在UTF8格式下,显示3, ANSI格式下显示2
这样一来,不符合人的自然感觉,于是,有个升级版的函数
2. mb_strlen
$str = "我";
echo mb_strlen($str,'utf-8'); //
要加上第二个参数才行,对待\n等转义字符上同strlen一样,视同一个字符
3. strpos 查找字符串$needle在字符串$haystack中首次出现的位置
stripos和strpos类似,区别是stripos不区分大小写
strrpos和strpos类似,区别是strrpos是找最后一次出现的位置
strripos和strrpos类似,区别是它不区分大小写
a needle in a haystack 草垛里的针,needle是针,haystack草垛。就是在草垛里找缝衣针的意思。
mixed strpos ( string $haystack , mixed $needle [, int $offset = ] )
所以,了解英语意思的话,很容易知道怎么去用。查找返回int类型位置,如果没找到返回bool值false
注意几点:
3.1.位置是从0开始的
//位置是从0开始的,a在 abc的 第0个位置
var_dump( strpos('abc','a') ); //int 0
3.2. 位置都是指的头部的位置
//位置是从needle的头部开始算
//bc 首次出现在 abcbc 的位置,索引是1
var_dump( strpos('abcbc', 'bc') ); //int 1
3.3. 第三个参数$offset指定了从什么位置开始找,默认是0,就是从头开始找,指定位置不能为负数
//指定查找位置为2,也就是第一个c出现的位置,从c的位置(含c)开始往后找bc,bc第一次出现的位置就是3
$str = "abcbc";
var_dump( strpos($str,'bc',2) ); //int 3

3.4.处理汉字的时候出现位置的错误,和strlen判断汉字长度类似
//字符串中带汉字等
//utf-8下,一个汉字占了3个位置
$str = "a我是中国人bc";
var_dump(strpos($str,'是中')); //int 4
4.str_replace
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
4.1 所有参数都是字符串的时候,很容易理解:把$search替换成$replace,唯一要注意的是,最后那个可选参数$count,并不是你设置个1,它就替换1次,设置2,就替换2次,而是替换完成后,系统把次数赋值给$count!这个数不是你能设置的!
4.2 替换发生后,$subject的值并没有变,只有$subject = str_replace(...);这样$subject才会变为替换后的结果。
4.3 当$search是数组,$replace是字符串时,替换的对应关系是:$search每一项都对应$replace



4.4 $search是字符串,$replace是数组时,都替换成Array了,不要这么用,如下图

4.5 $search和$replace都是数组的时候,是一一对应的关系,长短不一致时,看下图



4.6 $subject可以是字符串,也可以是一维数组,是数组的话,每一子项都会查找替换。如果是数组中包含数组那种,则不替换(不工作了!)
都是替换,str_replace在查找项和替换项都是数组的时候,我们知道是一项一项的过,导致的结果:1,替换是分过程的,有先后顺序的,第n次替换对第n+1次替换有影响。
举个例子:
$search = array('男人','女人');
$replace = array('女人','男人');
$subject = '男人有钱就变坏,女人变坏就有钱';
/*
原句是:男人有钱就变坏,女人变坏就有钱
想换成:女人有钱就变坏,男人变坏就有钱
却得到:男人有钱就变坏,男人变坏就有钱
*/
$new_subject = str_replace($search,$replace,$subject,$count);
echo $new_subject; //男人有钱就变坏,男人变坏就有钱
echo $count; //
/*
结果显示:男人有钱就变坏,男人变坏就有钱
怎么结果里都是男人?
因为str_replace替换是分过程的,第n步的替换结果影响第n+1步的匹配情况。
第1步:找数组对应第1项,也就是男人换成女人,于是:女人有钱就变坏,女人变坏就有钱
第2步:找数组对应第2项,也就是女人换成男人,于是:男人有钱就变坏,男人变坏就有钱
结束:替换了3次
*/
但是strtr就不一样了!
/*
strtr 替换(注意,不是strtr,我一直以为是strstr)
用法1:string strtr ( string $str , string $from , string $to )
strstr比较变态的,不符合直觉的地方是,不把$from和$to当成一个字符串,而是分割开来看,具体看下面的例子。
*/
echo strtr('男人有钱就变坏,女人变坏就有钱','男孩','女'); //女人有钱就变坏,女人变坏就有钱
/*
上面这一句,
我想是这样的:从句子【男人有钱就变坏,女人变坏就有钱】中找到所有的【男孩】并替换成【女】,于是,没有找到【男孩】,于是没有替换!
但是,这是错误的!这个函数违反直觉的地方,它是下面这样工作的:
把【男孩】分割开,【女】分割开,再$from[$n]和$to[$n]对应起来,对应不上的,扔了。于是,男=》女,孩对应不上,扔了
结果就是【女人有钱就变坏,女人变坏就有钱】
*/
echo '<br>';
echo strtr('男人有钱就变坏,女人变坏就有钱','男女','女男');
/*
上面这一句,
吸收了上上次的经验,我觉得是男=》女,女=》男,我知道它不像str_replace那样,分步骤来替换,而是同时替换。
这样实现的目的是:【女人有钱就变坏,男人变坏就有钱】
但是现实是: 【女人有钱簱珘睏,男人珘睏簱有钱】
是的!!!!出现了奇怪的结果,奇怪的文字,查了下,文档中strtr没有写是二进制安全的!我也不清楚会有什么结果了。
*/ /*
strtr的用法2相对安全点,我也没有进行其他测试,欢迎留言指出问题
用法2:string strtr ( string $str , array $replace_pairs )
$replace_pairs是数组的形式的替换规则,也就是from->to
因为strtr的第一种用法违反直觉,导致很容易有疑问,数组的键值和内容必须一样吗?数组的每一项键值和内容是当成整体来替换,还是再分隔开对应?
答:经测试:1.数组的键值和内容并不一定相同 2.数组的每一项键值和内容都是看成一个整体的
这样来想,strtr的第一种用法,何尝不是把字符串$from和$to分割成数组呢?第2种用法是直接给个数组,自然不再分割了。
同时,需要注意的是,与str_replace不同,它不是分步骤的替换 */ echo '<br>'; echo strtr('男人女人',array(
'男'=>'女',
'女'=>'男'
)
); //女人男人
/*
上面,如果是str_replace来操作的话,第一步,男变成女,于是,女人女人,第2步,女换成男,于是男人男人
而strtr来操作,就是【男人女人】中男变成女同时女变成男,一步操作就搞定。结果就是【女人男人】
*/
echo '<br>';
echo strtr('男人女神',array(
'男神'=>'女',
'女'=>'男'
)
); //男人男神
/*
上面,strtr的数组中,键值和内容都是一个整体哦!
于是,男神没有匹配的,女人替换成男,于是【男人女人】变成【男人男神】
*/
5.截取子字符串substr
string substr ( string $string , int $start [, int $length ] )

substr在utf-8编码下,截取汉字会乱码哦!
header("Content-type:text/html;charset=UTF-8");
$str = '我学php';
var_dump(substr($str,0,3)); //我,utf-8下,一个汉字3个字节
echo '<br>';
var_dump(substr($str,1,3));//乱码
mb_substr和substr相比,可以用第4个参数指定编码,是按照字符数截取的,解决了汉字乱码问题。
<?php
header("Content-type:text/html;charset=UTF-8"); $str = '我学php';
var_dump(substr($str,0,3)); //我,utf-8下,一个汉字3个字节
echo '<br>';
var_dump(substr($str,1,3));//乱码
echo '<br>';
var_dump(mb_substr($str,1,null,'utf-8')); //学php
?>
6.把字符串通过分割符拆成数组explode
把数组再粘连成字符串用implode
array explode ( string $delimiter , string $string [, int $limit ] )
如果$limit是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。
如果 $limit 是负数,则返回除了最后的 -limit 个元素外的所有元素。
如果 limit 是 0,则会被当做 1。
如果 delimiter 为空字符串(""), explode() 将返回 FALSE 。 如果 delimiter 所包含的值在 string 中找不到,并且使用了负数的 limit , 那么会返回空的 array , 否则返回包含 string 单个元素的数组。





implode把数组再合成字符串


收到
常用的PHP字符串操作函数的更多相关文章
- LoadRunner中常用的字符串操作函数
LoadRunner中常用的字符串操作函数有: strcpy(destination_string, source_string); strc ...
- [转载]c++常用字符串操作函数
原文地址:c++常用字符串操作函数作者:Valsun 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source ...
- PHP开发中常用的字符串操作函数
1,拼接字符串 拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行 ...
- C语言的常用字符串操作函数(一)
一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...
- mysql常用字符串操作函数大全,以及实例
今天在论坛中看到一个关于mysql的问题,问题如下 good_id cat_id12654 665,56912655 601,4722 goods_id是商品i ...
- JavaScript中常见的字符串操作函数及用法
JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- C/C++ 字符串操作函数 思维导图梳理
这些常用的字符串操作函数都是包在string.h头文件中. 分享此图,方便大家记忆 <(^-^)> 选中图片点击右键,在新标签页中打开图片会更清晰
- js 字符串操作函数有哪些
js 字符串操作函数有哪些 一.总结 一句话总结:js字符串函数都是字符串对象的方法,是通过调用字符串方法的方式调用,和java,php里面不一样. 1.字符串替换函数怎么用? 这里的正则表示是加双引 ...
随机推荐
- 【mybatis】子查询
networkResource的 resultMap <resultMap id="NetworkResultMap" type="com.chinamobile. ...
- 类加载器ClassLoader源码解析
1.ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的. 2.类加载器结构 结构:BootstrapClassLoader(祖父)-->ExtClassL ...
- matlab学习笔记12_4rmfield,arrayfun,structfun,struct2cell,cell2struct
一起来学matlab-matlab学习笔记12 12_4 结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct 觉得有用的话,欢迎一起讨论相互学 ...
- 工控随笔_25_西门子TIA 博图V14.SP1安装报错,授权错误
前面有一篇文章说过西门子的软件安装的时候太麻烦,很容易出现错误. 但是有些错误在安装的时候却没有关系,例如下面的错误. 如上图所示,安装已经到最后一步,总结前面的修改系统组态已经打勾(✔) ,而且提示 ...
- 5中I/O模型
输入操作包括两个阶段1.等待网络数据到达,被复制到内核中的缓冲区2.从内核缓冲区复制到进程缓冲区5种I/O模型1.阻塞式I/O:包含数据被复制到内核缓冲区和应用进程缓冲区两个过程,调用recvfrom ...
- 将.cer证书导入java密钥库?
导入.cer从浏览器下载的证书文件(打开网址并挖掘详细信息)到cacerts keystore中java_home\jre\lib\security为我工作,而不是尝试生成和使用我自己的密钥库. 去你 ...
- nexus 3.x最新版下载安装和上传下载jar
注意: nexus 3.x最新版好像不用下载索引了,目前我使用一些基本功能没有索引也能耍的很6 下载 nexus最新版下载https://www.sonatype.com/download-oss-s ...
- MyBatis踩坑之SQLProvider转义字符被删除问题
目录 踩坑背景 问题描述 原因追踪 解决方案 方法一 方法二 踩坑背景 项目架构:Spring Boot + MyBatis + MySQL. 使用MyBatis作为ORM框架,jdbc驱动使用的是m ...
- massif 图例
19.63^ ### | # | # :: | # : ::: | :::::::::# : : :: | : # : : : :: | : # : : : : ::: | : # : : : : : ...
- 配置SSH无密码登录【原著】
环境:两台Centos虚拟机,配置了静态的ip.(详见虚拟机如何配置静态的IP地址的操作步骤) 192.168.75.21192.168.75.22 第一步:为每台服务器配置静态IP地址参见: 虚拟机 ...