1、字符串比较
(1)strcmp($str1,$str2) //比较两个字符串是否相等,当结果为0时表示相等,为1时表示第一个字符串大于第二个字符串,为-1是第一个字符串小于第二个字符串(这是大于和小于只是位置上的比较,在ascii码表中后面的字符大于前面的字符)
1 /** 2 * strcmp($str1, $str2) 比较两个字符串是否相等 3 * @param string $str1 第一个字符串 4 * @param string $str2 第二个字符串 5 */ 6 $str1 = 'hell'; 7 $str2 = 'ello'; 8 var_dump(strcmp($str1, $str2)); //输出1,因为两个字符串的首字母不同,比较首字母,h的位置在e后面,所以h比e大
(2)strncmp($str1, $str2, $length); //比较两个字符串截取指定长度的子串
1 /** 2 * strncmp($str, $str2, $len) 比较两个字符串从开头到指定长度的子串 3 * @param string $str1 第一个字符串 4 * @param string $str2 第二个字符串 5 * @param int $len 要截取的开头 6 */ 7 $str3 = 'my pleasure!'; 8 $str4 = 'my book'; 9 var_dump(strncmp($str3, $str4, 2)); //输出0,因为两个字符串截取两个长度都是my
相关函数strcasecmp()比较两个字符串时不区分大小写,strnatcmp(),strnatcasecmp(),strncasecmp()和上述两个函数相似,而且不是很常用,在此不再赘述
2、字符串查找
(1)strstr($str,$need,bool $return_before=false) 查找字符串中从$need开始到结尾的字符串 <=>和strchr 是同义函数
1 /** 2 * strstr($str, $need, $return_before = false) === strchr 3 * @param string $str 要操作的字符串 4 * @param string $need 要查找的字符串 5 * @bool $return_before 是否返回$need在$str中首次出现之前的字符串 6 * @description:返回$need在$str中首次出现的开始到字符串结尾的那段字符串 7 * 相关函数:stristr()不区分大小写, 8 */ 9 $email = 'yimengshixin@yeah.net'; 10 $email_suffix = strstr($email,'@'); //输出@yeah.net 11 $domain = trim($email_suffix, '@'); 12 var_dump($domain); //输出yeah.net 13 $username = strstr($email, '@', true); 14 var_dump($username); //输出yimengshixin
(2)strrchr($str, $need) 在字符串$str中查找从最后一次出现字符$need开始到字符串结尾的子串
/** * strrchr($str, $need) * @param string $str 要操作的字符串 * @param string $need 要查找的字符(如果是一个字符串,就使用字符串的第一个字符) * @description:返回$need在$str最后一次出现的位置开始到字符串结尾的那段字符串 */ $url = 'http://www.test.com/news/detail/2012/11/26/9778.html'; $baseName = strrchr($url, '/'); //输出:/9778.html echo trim($baseName, '/'); //输出:9778.html
(3)strpos($str, $need) 在字符串$str中查找$need首次出现的位置,返回这个位置值 =>不区分大小写时用stripos()
(4)strrpos($str, $need) 在字符串$str中查找$need最后一次出现的位置,返回这个位置 =>不区分大小写时用strripos()
1 /** 2 * strpos($str, $need [,int $offset]) 3 * @param string $str 要操作的字符串 4 * @param string $need 要被搜索的字符 5 * @param int $offset 搜索的起始位置(即字符串哪个字符开始算起) 6 * @description:搜索$need在$str中首次出现的位置 7 * 相关函数:stripos()不区分大小写,strrpos()最后一次出现的位置 8 */ 9 $path = 'var/cache/tpl/20121126.php'; 10 $root_location = strpos($path, '/'); 11 var_dump($root_location); //输出3 12 var_dump(substr($path, 0, $root_location)); //输出var 13 $filename_location = strrpos($path, '/'); 14 var_dump($filename_location); //输出13 15 var_dump(substr($path, 0, $filename_location)); //输出var/cache/tpl 16 var_dump(substr($path, $filename_location, strlen($path))); //输出/20121126.php
(5)strpbrk($str, $charlist) 查找字符集$charlist的任意一个字符在$str首次出现的位置开始到结尾的子串
1 /** 2 * strpbrk($str, $charlist) 3 * @param string $str 要操作字符串 4 * @param string $charlist 要查找的字符集 5 * @description:在$str中查找$charlist中任意一个字符,返回指定字符第一次出现的位置开始的剩余部分 6 */ 7 $string = 'We have nothing to do!'; 8 $need = 'ahvt'; 9 var_dump(strpbrk($string, $need)); //输出have nothing to do,因为在字符串$string中,h出现的位置在a前
3、字符串的截取与转化
(1)substr($str, $start, $length) 截取字符串从$start开始截取$length个字符串形成的子串
1 /** 2 * substr($str, $start, $length) 3 * @param string $str 要截取的字符串 4 * @param int $start 起始位置 5 * @param int $length 截取的长度 6 * @description : 截取字符串$str中从start位置开始截取$length个长度 7 */ 8 $sStr = 'http://bbs.test.com'; 9 var_dump(substr($sStr, 0, 4)); //输出http
扩展:多字节字符串的截取(如汉字)
mb_substr()用法与substr()类似
mb_substr($str, $start, $length, $charset)
1 /** 2 * mb_substr($str, $start, $length,$charset) 截取多字节的字符串和substr()用法一样 3 * @param string $charset 编码类型 4 */ 5 $var = '中国人民abc'; 6 var_dump(mb_substr($var,0,5,'utf-8'));
(2)implode($sep, $str) 将字符串通过分隔符转化为数组
1 /** 2 * explode($sep, $str) 通过一个分隔符将一个字符串转化为一个数组 3 * @param string $sep 分隔符 4 * @param string $str 要分隔的字符 5 */ 6 $dir = 'var/www/cache/tpl'; 7 //输出:array 0 => string 'var' (length=3)1 => string 'www' (length=3)2 => string 'cache' (length=5) 3 => string 'tpl' (length=3) 8 var_dump(explode('/', $dir));
(3)impolde($sep, $str) 将数组通过分隔符转化为字符串 <=>join
1 /** 2 * implode($sep, $array) 将数组通过分隔符连接成一个字符串 3 * @param string $sep 分隔符 4 * @param string $str 要分隔的字符 5 * 6 */ 7 $dirArray = array('http:/','bbs.test.com','index.php','news','detail','499','page','2.html'); 8 //输出:http://bbs.test.com/index.php/news/detail/499/page/2.html 9 var_dump(implode('/', $dirArray)); 10 var_dump(join('/',array('www','var'))); //输出www/var
(4)str_split($str, $length) 将字符串根据指定的长度分隔成一个数组(处理汉字时请注意编码,编码不同,所占字符长度也不同)
1 /** 2 * str_split($str, $length) 根据长度将字符串分割成数组 3 * @param string $str 要分割的字符串 4 * @param int $length 要分割的长度 5 */ 6 $split_str = '刘大,牛二,张三,李四,王五,朱六,廖七,周八,肖九'; 7 var_dump(str_split($split_str, 7)); //输出:array(0=>'刘大',1=>'牛二'……) 8
4、字符串替换、填充等
(1)str_replace($search, $replace, $str); 将字符串中$search部分用$replace来替换
1 /** 2 * str_replace($search, $replace, $str) 3 * @param string $search 要被替换的字符串 4 * @param string $replace 替换后的字符串 5 * @param string $str 要操作的字符 串 6 */ 7 $bad = 'bad man'; 8 var_dump(str_replace('bad', 'good', $bad)); //输出good man
(2)substr_replace($str, $replace, $start, $length) 在字符串$str副本中从$start位置开始截取$length个字符形成的字符串,并将这段字符串替换成指定字符串返回
1 /** 2 * substr_replace($str, $replace, $start, $length) 截取$str副本中从$start开始截取$length个字符并替换为$replace 3 * @param string $str 要操作的字符串 4 * @param string $replace 替换后的字符串 5 * @param int $start 开始位置 6 * @param int $length 长度 7 */ 8 $old = 'hello javascript!'; 9 var_dump(substr_replace($old, 'php', 6, strlen($old))); //输出hello php! 10 var_dump($old); //输出hello javascript!没有改变 11
(3)str_repeat($str, $times); 将字符串$str重复$times次形成新的字符串
1 /** 2 * str_repeat($str, $times) 3 * @param string $str 要重复的字符串 4 * @param int $times 重复的次数 5 */ 6 var_dump(str_repeat('##',6)); //输出:############
(4)str_pad($str, $pad_length, $pad_str, $pad_type) 字符串填充
1 /** 2 * str_pad($str, $pad_length, $pad_str, $pad_type = STR_PAD_RIGHT) 3 * @param string $str 被操作的字符串 4 * @param int $pad_length 填充后的长度 5 * @param string $pad_str 用于填充的内容 6 * @param const $pad_type 填充方向,分别有这向个常量 :STR_PAD_LEFT(从左边填充),STR_PAD_RIGHT(从右边填充),STR_PAD_BOTH(两边填充) 7 */ 8 var_dump(str_pad('abc',10,'**')); //输出abc******* 9 var_dump(str_pad('abc', 7, '*',STR_PAD_LEFT)); //输出****abc 10 var_dump(str_pad('abc', 6, '*', STR_PAD_BOTH)); //输出 *abc**
5、与ASCII相关的字符串操作
(1)ord(string $char)返回字符串对应的ASCII码值
(2)chr(int $ascii) 返回ascii值对应的字符
1 /** 2 * int ord(string $char) 3 */ 4 var_dump(ord('A')); //输出65 5 6 /** 7 * string chr(int $ascii) 8 */ 9 var_dump(chr(72)); //输出H
6、与html转义有关的
(1)strip_tags($str, $remain_tags) 删除html或xml标签(其实只要是<>都会被过滤掉)
(2)nl2br($str) 在新行前加入<br/>换行
(3)wordwrap($str, $length) 自动换行(强制换行)
1 /** 2 * strip_tags($str, $remain_tags) 3 * @param string $str 4 * @param string $remain_tags 要留的tag 5 */ 6 $html = '<h3>标题<span>更多</span><h3> <a href="http://www.test.com">链接</a><now></now>'; 7 var_dump(strip_tags($html)); //输出:标题更多 链接 8 var_dump(strip_tags($html, '<h3>')); //输出:<h3>标题更多<h3> 链接 9 10 /** 11 * nl2br($str) 新行前添加<br/> 12 */ 13 $nl = ' 14 very good!'; 15 var_dump(nl2br($nl)); //输出:'<br /> very good! 16 17 /** 18 * wordwrap($str, $length) 强制换行(自动换行) 19 */ 20 $line = '0123456789abcdefghijklmnopqrstuvwxyz'; 21 $newText = wordwrap($line, 10, '<br/>'); 22 var_dump($newText);
(4)htmlspecialchars($str, $style) 把几个预定义的字符转义成实体
需要转义的字符:双引号",单引号',大于号>,小于号<,还有&
$style有三个常量可供选择:ENT_COMPAT(只转义双引号,默认),ENT_QUOTES(双引号和单引号都转义),ENT_NOQUOTES(双引号和单引号都不转义)
1 /** 2 * htmlspecialchars($str, $style, $charset) 3 * @param string $str 要操作的字符串(要实体化) 4 * @param const $style 操作方式: 5 */ 6 $var1 = '<h3>you are a "bad" man!<h3>&me?'; //输出:<h3>you are a "bad" man!<h3>&me? 7 $var2 = "<h3>It's my pleasure!</h3>&me?"; //输出:<h3>It's my pleasure!</h3>&me? 8 var_dump(htmlspecialchars($var1)); 9 var_dump(htmlspecialchars($var2)); 10 var_dump(htmlspecialchars($var2,ENT_QUOTES)); //输出:<h3>It's my pleasure!</h3>&me?
(5)htmlentities($str,$flag =ENT_COMPAT,$charset)
将更多的字符转义成html实体
(6)addslashes($str)和stripslashes($str)为单引号和双引号添加转义\
7、对字符串进行计算(有的也理解为加密)
(1)cypt($str) 计算单字符串散列
(2)md5($str) 进行md5计算
8、其他未分类
(1)strrev($str) 反转字符串
如:$a = 'abc';
var_dump(strrev($a)); //输出:cba