PHP字符串操作的一些函数
整理了一些学习中可能会用到一具php字符吕操作了例子,这些例子由网上整理并且大部份有简单的测试以直接使用,当然php字符串操作函数系统自带的肯定可以使用,具体怎么用大家根据自己情况来定吧.
1、字符串的连接符
半角符号“.”是字符串的连接符,可以把两个或两个以上的字符串连接成一个字符串,例如:
- <?php
- $name = "PHP粉丝网:";
- $url = www.phpfensi;
- echo $name . $url . ".com";
- ?>
- //运行结果为:PHP粉丝网:www.phpfensi.com
2、去除字符串首尾空格和特殊字符
用户在输入数据时,经常会在无意中输入多余的空格,在有些情况下,字符串中不允许出现空格和特殊字符,此时就要去除字符串中的空格和特殊字符.
2.1 trim()函数
trim()函数用于去除字符串开始位置以及结束位置的空格,并返回当前去掉空格后的字符串.
语法格式:string trim(string str [,string charlist]);
trim()函数的参数str是要操作的字符串对象,参数charlist是可选参数,指定需要从待定的字符串中删除特定的字符,如果不设该参数,则所有的可选字符都将被删除,参数charlist的可选值如下:
参数值/说明
NULL,空值
t tab,制表符
n 换行符
x0B 垂直制表符
r 回车符
" " 空格
注:除了以上默认的过滤字符外,也可以在charlist中提供需要过滤的特殊字符,例如:
- <?php
- $str = "rr(:@_@ PHP粉丝网网 @_@:)";
- echo trim($str); //去除字符串左右两边的空格
- echo "<br />"; //执行换行
- echo trim($str, "rr(::)"); //去除字符串左右两边的特殊字符rr(::)
- ?>
- 运行结果:
- (:@_@ PHP粉丝网 @_@:)
- @_@ PHP粉丝网 @_@
2.2 ltrim()函数
ltrim()函数用于去除字符串左边的空格或者指定字符串.
语法格式如下:string ltrim(string str[, string charlist]);
例如:
- <?php
- $str = " (:@_@ PHP粉丝网 @_@:) ";
- echo ltrim($str); //去除字符串左边的空格
- echo "<br />";
- echo ltrim($str, "(:@_@ "); //去除字符串左边的字符@_@:)
- ?>
- //运行结果为:
- //(:@_@ PHP粉丝网网 @_@:)
- //PHP粉丝网 @_@:)
2.3rtrim()函数
rtrim()函数用于去除字符串右边的空格或者指定字符串.
语法格式如下:string rtrim(string str[, string charlist]);
例如:
- <?php
- $str = " (:@_@ PHP粉丝网 @_@:) ";
- echo rtrim($str); //去除字符串右边的空格
- echo "<br />";
- echo rtrim($str, "@_@:) "); //去除字符串右边的字符@_@:)
- ?>
- 运行结果为:
- (:@_@ PHP粉丝网 @_@:)
- (:@_@ PHP粉丝网
字符串转义、还原的方法有两种:一种是手动转义、还原字符串数据,另一种是自动转义、还原字符串数据.
1、手动转义、还原字符串数据
字符串可以用单引号(')、双引号("")、定界符({})3种方法定义,当使用字符串时,很可能在该字符串中存在这几种符号与PHP脚本混淆的字符,因此必须要做转义语句,这就需要在他前面加转义符号“”.
“”是一个转义字符,紧跟在“”后面的字符将变得没有任何意义.例如:
- <?php
- echo "I'm Tom";
- ?>
- //运行结果是:I'm Tom
2、自动转义、还原字符串数据
自动转义、还原字符串数据可以应用PHP提供的addslashes()函数和stripslashes()函数来实现.
addslashes()函数用来为字符串加入斜线“”.
stripslashes()函数用来将使用了addslashes()函数转义后的字符串还原.
例如:
- <?php
- $str = "I'm Tom";
- $str2 = addslashes($str); //对字符串中的特殊字符进行转义
- echo $str2 . "<br />";
- echo stripslashes($str2); //将转义后的字符串恢复,然后输出
- ?>
- //运行结果:
- //I'm Tom
- //I'm Tom
以上两个函数实现了对指定字符串进行自动转义和还原,除了上面介绍的方法以外,还可以对要转义、还原的字符串进行一定的范围限制,通过使用addcslashes()函数和stripcslashes()函数实现对指定范围内的字符串进行自动转义、还原.
addcslashes()函数实现转义字符串中的字符,即在指定的字符串前加上反斜线,stripcslashes()函数用来将使用addcslashes()函数转义的字符串还原.
例如:
- <?php
- $str = "自学PHP就上PHP粉丝网";
- $str2 = addcslashes($str, "自学PHP就上PHP粉丝网");
- echo $str2 . "<br />"; //输出转义后的字符串
- echo stripcslashes($str2); //输出还原后的字符串
- ?>
- 运行结果:
- 自学PHP就上PHP粉丝网
长度
PHP提供strlen函数来计算字符串的长度:
$str = "test";
echo strlen($str); // 将输出 4
有点奇怪的是strlen将中日等汉字以及全角字符都当作两个或四个长度计算,好在mbstring或icon两个函数可以帮助解决这个问题,比如:
$len = iconv_strlen($str, "GBK");
$len = mb_strlen($str, "GBK");
注:mbstring模块提供了大量的对含有多字节字符的字符串的处理函数,推荐多加应用,由于这篇文章讲的是字符串入门,所以不打算详细解说.
分隔与连接
PHP允许你把一个字符串按照一个分隔符进行分隔成一个数组,或者将一个数组组合成一个字符串,看下面的例子:
$str = "i love iwind";
$array = explode(" ", $str);
上面的explode函数,就把$str字符串按空格字符进行分隔,结果返回一个数组 $array:array("i", "love", "iwind").与explode函数有类似功能的有:preg_split(), spliti(),split()等函数.
与此相反的,implode和join则能把一个数组结合成一个字符串,他们是具有完全相同功能的函数.
$array = array("i", "love", "iwind");
$str = implode(" ", $array);
例中的implode函数将数组$array的每个元素用空格字符进行连接,返回一个字符串 $str: "i love iwind".
裁剪
一个字符串首和尾,可能不是你想要的部分,就可以用trim,rtrim,ltrim等函数,分别去除一个字符串两端空格,一个字符串尾部空格,一个字符串首部空格.
- echo trim(" i love iwind "); // 将得到 "i love iwind"
- echo rtrim(" i love iwind "); // 将得到 " i love iwind"
- echo ltrim(" i love iwind "); // 将得到 "i love iwind"
其实这三个参数不仅可以去除字符串首尾的空格,还可以去除它们的第二个参数指定的字符,如:
echo trim(",1,2,3,4,", ","); // 将得到 1,2,3,4 两端的","号被裁掉了.
有时还会看到有人使用chop这个函数,其实它是rtrim的同义函数.
大小写:对于英文字母来说,可以用strtoupper,strtolower将其转变成大写或小写.
echo strtoupper("i love iwind"); // 将得到 I LOVE IWIND
echo strtolower("I LOVE IWIND"); // 将得到 i love iwind
比较
一般可以用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为它们不一定全部为字符串,也可以为整型等等,比如:
- $a = "joe";
- $b = "jerry";
- if ($a != $b)
- {
- echo "不相等";
- }
- else
- {
- echo "相等";
- }
如果用 !==,===(可以看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较.
22 == "22"; // 返回 true
22 === "22"; // 返回false
正因为这样,所以我们的程序时常会发生一些想不到的“意外”:
0 == "我爱你"; // 返回true
1 == "1 我爱你";// 返回true
PHP里还有这样一组用于字符串比较的函数:strcmp,strcasecmp,strncasecmp(), strncmp(),它们都是如果前者比后者大,则返回大于0的整数;如果前者比后者小,则返回小于0的整数;如果两者相等,则返回0.它们比较的原理与其它语言的规则都是一样的。
strcmp是用于区分大小写(即大小写敏感)的字符串比较:
echo strcmp("abcdd", "aBcde"); // 返回 1 (>0), 比较的是 "b"和"B"
strcasecmp用于不区分大小写的字符串比较:
echo strcasecmp("abcdd", "aBcde"); // 返回 -1 (<0), 比较的是"d"和"e"
strncmp用于比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncmp("abcdd", "aBcde", 3); // 返回 1 (>0), 比较了 abc 和 aBc
strncasecmp用于不区分大小写的比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncasecmp("abcdd", "aBcde", 3); // 返回 0, 比较了 abc 和 aBc,由于不区分大小写,所以两者是相同的.
还有一种情况是单单比较字符串大小,达不到我们预定的要求,比如照常理 10.gif 会比 5.gif 大,但如果应用上面几个函数,就会返回 -1,即表示 10.gif比5.gif,针对这种情况,PHP提供了两个自然对比的函数strnatcmp,strnatcasecmp:
echo strnatcmp("10.gif", "5.gif"); // 返回 1 (>0)
echo strnatcasecmp("10.GIF", "5.gif"); // 返回 1 (>0)
替换
替换的意义在于将一个字符串的一部分进行改变,使之成为别外一个新的字符串,以满足新的要求,PHP里通常用str_replace("要替换的内容","要取代原内容的字符串","原字符串")进行替换.
echo str_replace("iwind", "kiki", "i love iwind, iwind said"); // 将输出 "i love kiki, kiki said"
即将 原字符串中的所有"iwind"都替换成了"kiki".
str_replace是大小写敏感的,所以对你不能设想用 str_replace("IWIND", "kiki",...)替换原字符串中的"iwind".
str_replace还可以实现多对一,多对多的替换,但无法实现一对多的替换:
echo str_replace(array("iwind","kiki"),"people","i love kiki,iwind said");
将会输出
i love people, people said
第一个参数中的array("iwind", "kiki")都被替换成了"people"
echo str_replace(array("iwind", "kiki"), array("gentle man", "ladies"), "i love kiki, iwind said");
输出 i love ladies, gentle man said 。也就是说第一个数组中的元素被第二个数组中的相对应的元素替换掉了,如果有一个数组比另一个数组元素数要少,那么不足的都会当作空来处理。
与此有些类似的是strtr,用法请参阅手册.
此外,PHP还提供了substr_replace,实现替换一部分的字符串。语法如下:
substr_replace (原字符串, 要替代的字符串, 开始替换的位置 [, 替换的长度])
其中,开始替换的位置从0开始计算,应该小于原字符串的长度。要替换的长度是可选的。
echo substr_replace("abcdefgh", "DEF", 3); // 将输出 "abcDEF"
echo substr_replace("abcdefgh", "DEF", 3, 2); // 将输出 "abcDEFfgh"
第一个例子中,从第三个位置(即"d")开始替换,从而把 "defgh"都替换成了“DEF”
第二个例子中,也是从第三个位置(即"d")开始替换,但只能替换2个长度,即到e,所以就把"de"替换成了"DEF".
PHP还提供了preg_replace,preg_replace_callback,ereg_replace,eregi_replace等函数应用正则表达式来完成字符串替换,用法请参考手册。
查找与匹配
PHP里用于查找或者匹配或者定位的函数非常多,它们都有不同的意义。这里只讲述用得比较多的strstr,stristr.后者与前者的功能,返回值都一样,只是不区分大小写。
strstr("母字符串", "子字符串")用来查找子字符串在母字符串中第一次出现的位置,并返回母字符串中从子字符串开始到母字符串结束的部分。比如
echo strstr("abcdefg", "e"); //将输出 "efg"
如果找不到子字符串,则返回空,因为可以用来判断一个字符串中是否含有另外一个字符串:
- $needle = "iwind";
- $str = "i love iwind";
- if (strstr($str, $needle))
- {
- echo "里面有 iwind";
- }
- else
- {
- echo "里面没有 iwind";
- }
将会输出"里面有 iwind"
字符串删除操作是这样的:
- $result = mysql_query($sql);
- $string = '{"array":[';
- while($row = mysql_fetch_array($result)){
- $string .= '{"id":"'.$row['id'].'"},';
- }
- $string = substr($string,0,-1);
- $string .= ']}';
$string = substr($string,0,-1) 这行代码的意思是,对$string 进行裁剪,从第 0 位开始,到倒数第一个.
这样的结果是,如果sql查询后有结果集的话,没问题,但是如果结果集为 空 的话,字符串就变成了{"array":]},数组被破坏了,想通过判断结果集是否为空来处理,但是 使用 empty($result) 并没有用,因为这个结果集是否为空,需要用 mysql_fetch_array() 来判断,所以增加$result 为空的判断失败了.
那另外一个解决办法就是从字符串上动手了,我的想法是,我想删除最后一个字符,但是它必须满足某个条件,比如最后一个字符是 ',',看php 的api 上,有这么一个方法 rtrim(),trim() 就是删除一些特殊字符用的,rtrim() 是只对字符串的右边操作,把代码改成下面就OK了.
$string = rtrim($string,',');
PHP 提供的字符串操作的 API 还是比较丰富的.
字符串转换成数组
今天在php论坛中看到以为朋友发了一个帖子请教php如何把字符串转换成数组;作为php程序员的新一第一反应是联想到explode(),implode()这两个函数,新一也是用里面的函数进行转换成数组的.
con[1]=28&selt[1]=1&con[2]=29&selt[2]=4&con[3]=26&selt[3]=4
&con[4]=30&selt[4]=2&con[5]=4&selt[5]=1&con[6]=11&con[7]=12
上面就是网友需要转换成PHP数组的字符串,下面也是新一提供PHP转换代码
新的PHP代码也可以解决字符串转换成数组的问题,最后phper网友应该在手册上面查到了parse_str()函数就可以把字符串转换成PHP数组;下面介绍一下parse_str()函数的说明让自己在脑子中好有印象.
parse_str() 函数把查询字符串解析到变量中
parse_str(string,array)
string:需要转换的字符串;
array:返回到一个数组中;
如果没有设置array的话就覆盖同名变量