PHP字符串——字符串函数

比较字符串
PHP有两个操做符和6个函数用于字符串间相互比较。

精确比较
你能够用==和===操做符来比较两个字符串是否相等。这两个操做符的不一样在于它们如何处理非字符串数据类型的操做数。==操做符把非字符串操做数转换成字符串,因此它认为3和”3“是相等的。===操做符不进行转换,而且若是参数的数据类型不一样就返回false。

比较操做符(<、<=、>和>=)也用于字符串。当比较操做符的一个参数是数字时,其它参数也将被转换为数字。
要明确地将两个数做为字符串比较,能够在必要时先把数字转换为字符串,使用strcmp()函数。


处理和查找字符串
子串,substr函数复制部分字符串
$piece=substr(string,start[,length]);
start参数是在string中要开始复制的位置,若是是0的话,就是说从字符串开头开始复制。length参数是要复制字符的个数(默认是复制到字符串末尾)。例如:
$name="Fred Flintstone";
$fluff=substr($name,6,4); //$fluff 是"lint"
$sound=substr($name,11);  //$sound是"tone"
要知道一个小字符串在一个大字符串中出现的次数,可使用substr_count()函数:
$number=substr_count(big_string,small_string);

substr_replace()函数容许使用不一样方式对字符串进行修改:
$string=substr_replace(original,new,start[,length]);
函数经过start(0的意思是字符串的开头)和length指定的值,用字符串new替换original的一部分。若是没有给出第四个参数,substr_replace()删除从start到字符串末尾的文字。
例如:
$greeting="good morning citizen";
$farewell=substr_replace($greeting,"bye",5,7);
//$farewell为"good bye citizen"
设定length为0来实现无删除的插入:
$farewell=substr_replace($farewell,"kind",9,0);
//$farewell 为"good bye kind citizen"
设定new为""来来实现无插入的删除:
$farewell=substr_replace($farewell,"",8);
//$farewell为"good bye"
下面是说明如何在字符串的开头插入内容:
$farewell=substr_replace($farewell,"now it's time to say",0,0);
//$farewell为"now it's time to say good bye"'
若是start为负值,则指定从字符串末尾开始到字符串开头替换的字符数:
$farewell=substr_replace($farewell,"riddance",-3);
//$farewell为"now it's time to say good riddance"
若是length为负值,则指定从字符串末尾开始删除的字符个数:
$farewell=substr_replace($farewell,"",-8,-5);
//$farewell为"now it's time to say good dance"

各类字符串函数
strrev()函数收一个字符串而后返回一个翻转顺序的拷贝:
$string=strrev(string);
例如:
echo strrev("There is no cabal");  //labas on si erehT
str_repeat()函数接收一个字符串和一个计数参数,而后返回一个由参数string重复count次组成的新字符串:
$repeated=str_repeat(string,count);
例如,建立一个分隔线:
echo str_repeat('-',40);
str_pad()函数用另外一个字符串填充一个字符串。能够选择用什么样的字符串来填充,以及加在左边、右边或两边都加:
$padded=str_pad(to_pad,length[,with[,pad_type]]);
默认是以空格加在字符串右边:
$string=str_pad('Fred Flintstone',30);
echo "$string:35:Wilma";
Fred Flintstone          :35:Wilma
可选的第三个参数是要增长的字符串:
$string=str_pad('Fred Flintstone',30,'.');
echo "{$string}35";
Fred Flintstone........35
可选的第四个参数能够是STR_PAD_RIGHT(默认)、STR_PAD_LEFT或STR_PAD_BOTH(左右都加,长度均分,使原字符串居中对齐)。例如:
echo '['.str_pad('Fred Flintstone',30,'',STR_PAD_LEFT)."]\n";
echo '['.str_pad('Fred Flintstone',30,'',STR_PAD_BOTH)."]\n";
[         Fred Flintstone]
[    Fred Flintstone     ]

分解字符串
PHP提供几个函数来将字符串分解为更小的部分。按复杂性递增排序,它们是explode()、strtok()、sscanf()。
$array=explode(separator,string[,limit]);
implode(),用含有几个较小字符串的数组建立一个大字符串:$string=implode(separator,array);join()函数是implode()函数的别名。

字符串查找函数
有一些函数用于在一个较大字符串中查找字符串或字符。它们分为3个系列:strpos()和strrpos()返回1个位置,strstr()、strchr()等返回找到的字符串,strspn()和strcspn()返回字符串的开头有多少与掩码匹配。
按字符的ASCII顺序值来查找。所以,下面的函数调用是相等的(由于44是逗号的ASCII值):
$pos=strpos($large,",");  //查找第一个逗号
$pos=strpos($large,44);   //也查找第一个逗号
若是没有找到指定的子串,全部的字符串查找函数都会返回false。若是子串出如今字符串的开头,函数就返回0。由于false能够转换为数字0,因此在测试失败时使用===来比较返回值:
if($pos===false){
//没有找到子串
}else{
//找到子串,$pos是字符串的偏移量。
}

返回位置的查找
strpos()函数查找一个小字符串在较大字符串中第一次出现的位置:
$position=strpos(large_string,small_string);
若是没有找到小字符串,strpos()返回false。
strrpos()函数查找某个字符(注意是单个字符而不是字符串)在字符串中最后一次出现的位置。它的参数及返回值类型和strpos()相同。
若是将一个字符串做为第二个参数传递给strrpos(),只查找参数字符串的首字符。

返回剩余字符串的查找
strstr()函数查找一个小字符在大字符串中第一次出现的位置,并返回从小字符串开始的部分。
strstr()的变种有:
stristr()//不区分大小写的strstr();
strchr()//strstr()的别名
strrchr()//查找字符在字符串中最后出现的位置
和strrpos()同样,strrchr()向后查找字符串,可是都只对字符,而不是一整个字符串。

strspn()和strcspn()函数告诉你字符串开头有多少个指定的字符:
$length=strspn(string,charset);
strcspn()里的c表明complement(补足物),它说明字符串的开头有多少不是由字符集中的字符组成。当感兴趣的字符比不感兴趣的字符多时,使用strcspn()函数。

分解URL
parse_url()函数返回一个由URL成分组成的数组:
$array=parse_url(url);
例如:
$bits=parse_url('http://me:secret@example.com/cgi-bin/board?user=fred);
print_r($bits);
Array
(
    [scheme]=>http
    [host]=>example.com
    [user]=>me
    [pass]=>secret
    [query]=>user=fred
)
获得的数组键名可能为scheme、host、port、user、pass、path、query和fragment。数组