比較字符串
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。數組