在做網(wǎng)站中,一般地,如果想查看字符串的各個部分。例如,查看句子中的單詞(如在拼寫檢查時),或者要將一個域名或電子郵件地址分割成一個個的組件部分。PHP提供了幾個字符串函數(shù)(和一個正則表達式函數(shù))來實現(xiàn)此功能。
explode()函數(shù)能夠劈開字符串,具體語法如下:array explode(string separator, string input, int limit);
這個函數(shù)帶有一個輸入字符串作為參數(shù),并根據(jù)一個指定的分隔符字符串將字符串本身分割為小塊,將分割后的小塊返回到一個數(shù)組中??梢酝ㄟ^可選的參數(shù)limit來限制分成字符串小塊的數(shù)量。
【示例1】如果通過顧客的電子郵件地址獲得域名,可以使用如下所示的代碼:$email_array = explode("@", $email);
在這里,調(diào)用函數(shù)explode()將顧客的電子郵件地址分割成兩部分:用戶名稱,它保存于$email_array[0]中,而域名保存在$email_array[1]中?,F(xiàn)在,就可以測試域名來判斷顧客的來源,分別進行不同的反饋處理。if ($email_array[1]=="bigcustomer.com") $toaddress = "bob@bobsdomain.com";else $toaddress = "feedback@bobsdomain.com";注意:如果域名是大寫的或者大小寫混合的,這個函數(shù)就無法正常使用。這時可以通過將域名轉(zhuǎn)換成全是大寫或小寫的方法來避免這個問題,然后再按如下所示方法進行檢查是否匹配。if (strtolower($email_array[1])=="bigcustomer.com") $toaddress = "bob@bobsdomain.com";else $toaddress = "feedback@bobsdomain.com";
使用implode()或join()函數(shù)可以實現(xiàn)與函數(shù)explode()相反的效果,這兩個函數(shù)的效果是一致的。例如:$new_email = implode("@", $email_array);以上代碼是從$email_array中取出數(shù)組元素,然后用第一個傳入的參數(shù)字符將它們連接在一起。這個函數(shù)的調(diào)用同explode()十分相似,但效果卻相反。與函數(shù)explode()每次都將一個字符串全部分割成若干小塊不同,strtok()函數(shù)一次只從字符串中取出一些片段。對于一次從字符串中取出一個單詞的處理來說,strtok()函數(shù)比explode()函數(shù)的效果更好。
strtok()函數(shù)的基本語法如下:string strtok(string input, string separator);
分隔符可以是一個字符,也可以是一個字符串,但是,需要注意的是,輸入的字符串會根據(jù)分隔符字符串中的每個字符來進行分割,而不是根據(jù)整個分隔字符串來分隔。
調(diào)用函數(shù)strtok()并不是那么簡單。為了從字符串中得到第一個片段,可以調(diào)用strtok()函數(shù),并帶有兩個輸入?yún)?shù):一個是要進行片段化處理的字符串,還有一個就是分隔符。為了從字符串中得到片段序列,可以只用一個參數(shù)(分隔符),該函數(shù)會保持它自己的內(nèi)部指針在字符串中的位置。如果想重置指針,可以重新將該字符串傳給這個函數(shù)。
【示例2】使用strtok()函數(shù)獲取字符串片段。$token = strtok($feedback, " ");echo $token."<br>";while ($token!=""){ $token = strtok(" "); echo $token."<br>";};
通常,使用像empty()這樣的函數(shù)來檢查顧客是否在表單中真正輸入了反饋信息。在上面代碼中,將顧客反饋中的每個片段打印在每一行上,并一直循環(huán)到不再有字符片段。在這個過程中,空字符串將被自動跳過。使用substr()函數(shù)可以訪問一個字符串給定起點和終點的子字符串。當需要得到某個固定格式字符串中的一部分時,它會非常有用。substr()函數(shù)的基本語法如下:string substr(string string, int start, int [length] );這個函數(shù)將返回字符串的子字符串副本。
【示例3】使用substr()函數(shù)截取字符串。$test = "Your customer service is excellent";substr($test, 1);
如果只用一個正數(shù)作為子字符串起點來調(diào)用這個函數(shù),將得到從起點到字符串結(jié)束的整個字符串。上面示例將返回“our customer service is ex-cellent”。注意,字符串的起點和數(shù)組一樣是從零開始的。
【示例4】如果只用一個負數(shù)作為子字符串起點來調(diào)用它,將得到一個原字符串尾部的一個子字符串,字符個數(shù)等于給定負數(shù)的絕對值。例如:$test = "Your customer service is excellent";substr($test, -9);
上面代碼將返回“excellent”。length參數(shù)可以用于指定返回字符的個數(shù)(如果它是正數(shù)),或是字符串序列的尾部(如果它是負數(shù))。例如:substr($test, 0, 4);將返回字符串的前4個字符,即“Your”。下面的代碼:echo substr($test, 4, -13);將返回從第4個到倒數(shù)第13個字符,即“cus-tomer service”,第1個字符的位置為0,因此位置5就是第6個字符。