本文內(nèi)容較長(zhǎng),如有被截?cái)嗷蛉笔В?qǐng)參考原文:
PHP函數(shù)參考24-常用字符串函數(shù) - 9ong
PHP函數(shù)參考25-常用數(shù)組函數(shù) - 9ong
-
addslashes — 使用反斜線引用字符串
返回字符串,該字符串為了數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)句等的需要在某些字符前加上了反斜線。這些字符是單引號(hào)(')、雙引號(hào)(")、反斜線(\)與 NUL(NULL 字符)。
注意:PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默認(rèn)是 on, 實(shí)際上所有的 GET、POST 和 COOKIE 數(shù)據(jù)都用被 addslashes() 了。 不要對(duì)已經(jīng)被 magic_quotes_gpc 轉(zhuǎn)義過(guò)的字符串使用 addslashes(),因?yàn)檫@樣會(huì)導(dǎo)致雙層轉(zhuǎn)義。 遇到這種情況時(shí)可以使用函數(shù) get_magic_quotes_gpc() 進(jìn)行檢測(cè)。
bin2hex — 函數(shù)把包含數(shù)據(jù)的二進(jìn)制字符串轉(zhuǎn)換為十六進(jìn)制值
hex2bin — 轉(zhuǎn)換十六進(jìn)制字符串為二進(jìn)制字符串
chop — rtrim 的別名
-
chr — 返回指定的字符
返回相對(duì)應(yīng)于 ascii 所指定的單個(gè)字符。
此函數(shù)與 ord() 是互補(bǔ)的。
ord — 轉(zhuǎn)換字符串第一個(gè)字節(jié)為 0-255 之間的值
-
convert_uuencode — 使用 uuencode 編碼一個(gè)字符串
convert_uuencode() 使用 uuencode 算法對(duì)一個(gè)字符串進(jìn)行編碼。
uuencode 算法會(huì)將所有(含二進(jìn)制數(shù)據(jù))字符串轉(zhuǎn)化為可輸出的字符,并且可以被安全的應(yīng)用于網(wǎng)絡(luò)傳輸。使用 uuencode 編碼后的數(shù)據(jù)將會(huì)比源數(shù)據(jù)大35%左右。
用法同base64_encode,可以用于對(duì)二進(jìn)制數(shù)據(jù)的編碼。
convert_uudecode — 解碼一個(gè) uuencode 編碼的字符串
-
count_chars — 返回字符串所用字符的信息
count_chars( string $string[, int $mode = 0] ) : mixed統(tǒng)計(jì) string 中每個(gè)字節(jié)值(0..255)出現(xiàn)的次數(shù),使用多種模式返回結(jié)果。
mode參數(shù):
0 - 以所有的每個(gè)字節(jié)值作為鍵名,出現(xiàn)次數(shù)作為值的數(shù)組。
1 - 與 0 相同,但只列出出現(xiàn)次數(shù)大于零的字節(jié)值。
-
crc32 — 計(jì)算一個(gè)字符串的 crc32 多項(xiàng)式
生成 str 的 32 位循環(huán)冗余校驗(yàn)碼多項(xiàng)式。這通常用于檢查傳輸?shù)臄?shù)據(jù)是否完整。
-
crypt — 單向字符串散列
password_hash()使用了一個(gè)強(qiáng)的哈希算法,來(lái)產(chǎn)生足夠強(qiáng)的鹽值,并且會(huì)自動(dòng)進(jìn)行合適的輪次。password_hash()是crypt()的一個(gè)簡(jiǎn)單封裝,并且完全與現(xiàn)有的密碼哈希兼容。推薦使用password_hash()。
echo — 輸出一個(gè)或多個(gè)字符串
explode — 使用一個(gè)字符串分割另一個(gè)字符串
-
implode — 將一個(gè)一維數(shù)組的值轉(zhuǎn)化為字符串
explode與implode目前盡量按照分割符參數(shù)在前,字符串或數(shù)組在后
注意:implode第一個(gè)參數(shù)分隔符可以忽略,也就是只有一個(gè)參數(shù)數(shù)組時(shí),會(huì)默認(rèn)使用空字符作為分隔符連接字符串。
implode( string $glue, array $pieces) : stringimplode( array $pieces) : string注意:join函數(shù)是implode的別名
-
get_html_translation_table — 返回使用 htmlspecialchars 和 htmlentities 后的轉(zhuǎn)換表
返回 htmlspecialchars() 和 htmlentities() 處理后的轉(zhuǎn)換表。
在很多自有框架中,我們常會(huì)看到內(nèi)部都有一個(gè)函數(shù)是用于手動(dòng)替換html特殊符號(hào)的,其實(shí)php自身帶了一個(gè)函數(shù)可以提供html特殊符號(hào)的函數(shù),不需要我們手動(dòng)保存更新:
```php
print_r(get_html_translation_table(HTML_ENTITIES,ENT_COMPAT|ENT_QUOTES));
```
```php
Array
(
["] => "
[&] => &
['] => '
[<] => <
[>] => >
[ ] =>
[?] => ¡
[¢] => ¢
[£] => £
[¤] => ¤
[¥] => ¥
[|] => ¦
[§] => §
[¨] => ¨
[?] => ©
[a] => ª
[?] => «
[?] => ¬
...
```
-
htmlentities — 將字符轉(zhuǎn)換為 HTML 轉(zhuǎn)義字符
本函數(shù)各方面都和 htmlspecialchars() 一樣,除了 htmlentities() 會(huì)轉(zhuǎn)換所有具有 HTML 實(shí)體的字符。
-
html_entity_decode — Convert HTML entities to their corresponding characters
htmlentities 的反向解碼操作。
-
htmlspecialchars — 將特殊字符轉(zhuǎn)換為 HTML 實(shí)體
通過(guò)get_html_translation_table函數(shù)可以知道,只有5個(gè)特殊符號(hào)被定義為htmlspecialchars:
["] => " [&] => & ['] => ' [<] => < [>] => > -
htmlspecialchars_decode — 將特殊的 HTML 實(shí)體轉(zhuǎn)換回普通字符
htmlspecialchars的反向解析操作。
lcfirst — 使一個(gè)字符串的第一個(gè)字符小寫(xiě)
ucfirst — 將字符串的首字母轉(zhuǎn)換為大寫(xiě)
-
ucwords — 將字符串中每個(gè)單詞的首字母轉(zhuǎn)換為大寫(xiě)
ucwords( string $str[, string $delimiters = " \t\r\n\f\v" ] ) : string可選的 delimiters,包含了單詞分割字符。
$foo = 'hello|world!'; $bar = ucwords($foo); // Hello|world! $baz = ucwords($foo, "|"); // Hello|World! levenshtein — 計(jì)算兩個(gè)字符串之間的編輯距離
md5_file — 計(jì)算指定文件的 MD5 散列值
-
md5 — 計(jì)算字符串的 MD5 散列值
由于此函數(shù)依賴(lài)的算法已不足夠復(fù)雜,不推薦使用此函數(shù)對(duì)明文密碼加密。如果用于創(chuàng)建密碼哈希值,建議使用password_hash() - 創(chuàng)建密碼的散列(hash)
-
metaphone — 計(jì)算str的變音鍵
與soundex()類(lèi)似,metaphone為發(fā)音相似的單詞創(chuàng)建相同的鍵。它比soundex()更準(zhǔn)確,因?yàn)樗烙⒄Z(yǔ)發(fā)音的基本規(guī)則。變音位生成的鍵是可變長(zhǎng)度的。
money_format — 將數(shù)字格式化成貨幣字符串
-
nl2br — 在字符串所有新行之前插入 HTML 換行標(biāo)記
在字符串 string 所有新行之前插入 '<br />' 或 '<br>',并返回。
可以理解為將\r\n替換成html換行標(biāo)簽<br /> number_format — 以千位分隔符方式格式化一個(gè)數(shù)字
-
parse_str — 將字符串解析成多個(gè)變量
parse_str( string $encoded_string[, array &$result] ) : void如果 encoded_string 是 URL 傳遞入的查詢(xún)字符串(query string),則將它解析為變量并設(shè)置到當(dāng)前作用域(如果提供了 result 則會(huì)設(shè)置到該數(shù)組里 )。
注意:我們強(qiáng)烈建議一定要帶第二個(gè)參數(shù)result,變量將會(huì)以數(shù)組元素的形式存入到這個(gè)數(shù)組。該函數(shù)沒(méi)有返回值,將由result作為替代
$str = "first=value&arr[]=foo+bar&arr[]=baz"; // 推薦用法 parse_str($str, $output); echo $output['first']; // value echo $output['arr'][0]; // foo bar echo $output['arr'][1]; // baz // 不建議這么用 parse_str($str); echo $first; // value echo $arr[0]; // foo bar echo $arr[1]; // baz -
print — 輸出字符串
print 實(shí)際上不是函數(shù)(而是語(yǔ)言結(jié)構(gòu)),所以可以不用圓括號(hào)包圍參數(shù)列表。
和 echo 最主要的區(qū)別: print 僅支持一個(gè)參數(shù),并總是返回 1。
還是用echo吧。
printf — 輸出格式化字符串
-
sprintf — 輸出格式化字符串
可以理解為模板化輸出。
$num = 5; $location = 'tree'; $format = 'There are %d monkeys in the %s'; echo sprintf($format, $num, $location);//There are 5 monkeys in the tree更多模板格式化符號(hào)詳見(jiàn)官方文檔。
-
quotemeta — 轉(zhuǎn)義元字符集
返回 在下面這些特殊字符前加 反斜線() 轉(zhuǎn)義后的字符串。這些特殊字符包含:
. \ + * ? [ ^ ] ( $ )
setlocale — 設(shè)置地區(qū)信息
-
sha1 — 計(jì)算字符串的 sha1 散列值
由于此函數(shù)依賴(lài)的算法已不足夠復(fù)雜,不推薦使用此函數(shù)對(duì)明文密碼加密。
sha1_file — 計(jì)算文件的 sha1 散列值
與md5_file相似,但算法不一樣。該散列值是一個(gè) 40 字符長(zhǎng)度的十六進(jìn)制數(shù)字。 md5_file返回32字符長(zhǎng)度的16進(jìn)制數(shù)字。-
similar_text — 計(jì)算兩個(gè)字符串的相似度
兩個(gè)字符串的相似程度計(jì)算依據(jù) Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1) 的描述進(jìn)行。注意該實(shí)現(xiàn)沒(méi)有使用 Oliver 虛擬碼中的堆棧,但是卻進(jìn)行了遞歸調(diào)用,這個(gè)做法可能會(huì)導(dǎo)致整個(gè)過(guò)程變慢或變快。也請(qǐng)注意,該算法的復(fù)雜度是 O(N**3),N 是最長(zhǎng)字符串的長(zhǎng)度。
similar_text( string $first, string $second[, float &$percent] ) : int通過(guò)引用方式傳遞第三個(gè)參數(shù),similar_text() 將計(jì)算相似程度百分?jǐn)?shù)。
注意:返回值是兩個(gè)字符串中匹配字符的數(shù)目。而我們通常要的是相似度百分?jǐn)?shù),也就是第三個(gè)參數(shù)percent。
-
soundex — Calculate the soundex key of a string
Soundex鍵具有發(fā)音相似的單詞會(huì)產(chǎn)生相同的Soundex鍵的屬性,因此可以用來(lái)簡(jiǎn)化在你知道發(fā)音但不知道拼寫(xiě)的數(shù)據(jù)庫(kù)中的搜索。這個(gè)soundex函數(shù)返回一個(gè)以字母開(kāi)頭的4個(gè)字符的字符串。
sscanf — 根據(jù)指定格式解析輸入的字符
-
str_getcsv — 解析 CSV 字符串為一個(gè)數(shù)組
以 CSV 字段格式解析字符串輸入,并返回包含讀取字段的數(shù)組。
-
str_replace — 子字符串替換
str_replace( mixed $search, mixed $replace, mixed $subject[, int &$count] ) : mixed如果 search 和 replace 為數(shù)組,那么 str_replace() 將對(duì) subject 做二者的映射替換。如果 replace 的值的個(gè)數(shù)少于 search 的個(gè)數(shù),多余的替換將使用空字符串來(lái)進(jìn)行。如果 search 是一個(gè)數(shù)組而 replace 是一個(gè)字符串,那么 search 中每個(gè)元素的替換將始終使用這個(gè)字符串。該轉(zhuǎn)換不會(huì)改變大小寫(xiě)。
如果 search 和 replace 都是數(shù)組,它們的值將會(huì)被依次處理。
$phrase = "You should eat fruits, vegetables, and fiber every day."; $healthy = ["fruits", "vegetables", "fiber"]; $yummy = ["pizza", "beer", "ice cream"]; $newphrase = str_replace($healthy, $yummy, $phrase); print_r($newphrase);//You should eat pizza, beer, and ice cream every day如果search和replace參數(shù)都是數(shù)組的時(shí)候,需要注意一個(gè)先后查找替換問(wèn)題,一個(gè)特殊的范例:
$letters = array('a', 'p'); $fruit = array('apple', 'pear'); $text = 'a p'; $output = str_replace($letters, $fruit, $text); echo $output; // 由于先查找了字符a,替換成apple,之后再查找字符p,再將替換后的apple的兩個(gè)p字符又替換成pear // 輸出: apearpearle pear str_ireplace — str_replace 的忽略大小寫(xiě)版本
-
str_pad — 使用另一個(gè)字符串填充字符串為指定長(zhǎng)度
str_pad( string $input, int $pad_length[, string $pad_string = " "[, int $pad_type = STR_PAD_RIGHT]] ) : string支持左右填充指定字符,并指定長(zhǎng)度,默認(rèn)STR_PAD_RIGHT向右填充。
注意:如果填充字符的長(zhǎng)度不能被 pad_string 整除,那么 pad_string 可能會(huì)被縮短。
官方范例:
$input = "Alien"; echo str_pad($input, 10); // 輸出 "Alien " echo str_pad($input, 10, "-=", STR_PAD_LEFT); // 輸出 "-=-=-Alien" echo str_pad($input, 10, "_", STR_PAD_BOTH); // 輸出 "__Alien___" echo str_pad($input, 6, "___"); // 輸出 "Alien_" echo str_pad($input, 3, "*"); // 輸出 "Alien"
-
str_repeat — 重復(fù)一個(gè)字符串
str_repeat( string $input, int $multiplier) : string返回 字符串input 重復(fù) multiplier 次后的結(jié)果字符串。
echo str_repeat("-=", 5); //-=-=-=-=-= -
str_rot13 — 對(duì)字符串執(zhí)行 ROT13 轉(zhuǎn)換
在比較舊的php代碼中我們也會(huì)看一些借鑒str_rot13的加密算法,可以用來(lái)混淆??赡芑煜惴ú灰欢ú捎弥蟮牡?3個(gè)字符替換法。
ROT13 編碼簡(jiǎn)單地使用字母表中后面第 13 個(gè)字母替換當(dāng)前字母,同時(shí)忽略非字母表中的字符。編碼和解碼都使用相同的函數(shù),傳遞一個(gè)編碼過(guò)的字符串作為參數(shù),將得到原始字符串。
echo str_rot13("Tsing1");//Gfvat1 echo str_rot13("Gfvat1");//Tsing1 -
str_shuffle — 隨機(jī)打亂一個(gè)字符串
每次返回都是隨機(jī)的,不一樣的字符串
-
str_split — 將字符串轉(zhuǎn)換為數(shù)組
將一個(gè)字符串轉(zhuǎn)換為數(shù)組,如果第二個(gè)參數(shù)默認(rèn)是1時(shí),返回的就是字符數(shù)組,字符串的每個(gè)字符就是數(shù)組中的一個(gè)元素。
第二參數(shù)是將返回的數(shù)組的每個(gè)元素的長(zhǎng)度,比如設(shè)置為3,則返回的數(shù)組中的每個(gè)元素都是長(zhǎng)度為3的字符串。
$str = "Hello Friend"; $arr1 = str_split($str); $arr2 = str_split($str, 3); //print_r($arr1); print_r($arr2);輸出:
Array ( [0] => Hel [1] => lo [2] => Fri [3] => end ) str_word_count — 返回字符串中單詞的使用情況
-
strcmp — 二進(jìn)制安全字符串比較
如果 str1 小于 str2 返回 < 0;如果 str1 大于 str2 返回 > 0;如果兩者相等,返回 0。
注意:該函數(shù)不是人習(xí)慣的自然排序算法,可以考慮使用strnatcmp的字符串比較函數(shù)。
strcasecmp — 二進(jìn)制安全比較字符串(不區(qū)分大小寫(xiě))
strncmp — 二進(jìn)制安全比較字符串開(kāi)頭的若干個(gè)字符
strncasecmp — 二進(jìn)制安全比較字符串開(kāi)頭的若干個(gè)字符(不區(qū)分大小寫(xiě))
-
strip_tags — 從字符串中去除 HTML 和 PHP 標(biāo)記
該函數(shù)嘗試返回給定的字符串 str 去除空字符、HTML 和 PHP 標(biāo)記后的結(jié)果。
注意:由于 strip_tags() 無(wú)法實(shí)際驗(yàn)證 HTML,不完整或者破損標(biāo)簽將導(dǎo)致更多的數(shù)據(jù)被刪除。
stripslashes — 反轉(zhuǎn)義一個(gè)使用類(lèi)似使用addslashes 轉(zhuǎn)義的字符串
-
strpos — 查找字符串首次出現(xiàn)的位置
strpos( string $haystack, mixed $needle[, int $offset = 0] ) : int在字符串
needle,返回needle在haystack中首次出現(xiàn)的數(shù)字位置。
needle:建議一定要是字符串。
offset:如果提供了此參數(shù),搜索會(huì)從字符串該字符數(shù)的起始位置開(kāi)始統(tǒng)計(jì)。如果是負(fù)數(shù),搜索會(huì)從字符串結(jié)尾指定字符數(shù)開(kāi)始。
返回 needle 存在于 haystack 字符串起始的位置(獨(dú)立于 offset)。同時(shí)注意字符串位置是從0開(kāi)始,而不是從1開(kāi)始的。如果沒(méi)找到 needle,將返回 FALSE。
注意:strpos的參數(shù)順序,和explode等其他字符串函數(shù)不大一樣,strpos第一個(gè)參數(shù)是完整字符串,第二個(gè)參數(shù)needle是用于查找的子串或字符。
stripos — 查找字符串首次出現(xiàn)的位置(不區(qū)分大小寫(xiě))
-
strrpos — 計(jì)算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置
注意:區(qū)別于strpos指定字符在目標(biāo)字符串最后一次出現(xiàn)的位置。
strripos — 計(jì)算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置(不區(qū)分大小寫(xiě))
-
strstr — 查找字符串的首次出現(xiàn),并返回第一次出現(xiàn)的位置開(kāi)始到結(jié)尾的字符串
strstr( string $haystack, mixed $needle[, bool $before_needle = FALSE] ) : string返回 haystack 字符串從 needle 第一次出現(xiàn)的位置開(kāi)始到 haystack 結(jié)尾的字符串。
注意:strchr函數(shù)是strstr的別名函數(shù)
$url = 'http://www.9ong.com'; $domain = strstr($url, '//'); echo $domain; // 輸出://www.9ong.com stristr — strstr 函數(shù)的忽略大小寫(xiě)版本
-
strrchr — 查找指定字符在字符串中的最后一次出現(xiàn)
該函數(shù)返回 haystack 字符串中的一部分,這部分以 needle 的最后出現(xiàn)位置開(kāi)始,直到 haystack 末尾。
注意:該函數(shù)對(duì)應(yīng)正向函數(shù)是strchr也就是strstr,如果strrchr函數(shù)的needle參數(shù)包含不止一個(gè)字符,僅使用第一個(gè)字符。該參數(shù)行為不同于strstr函數(shù)。
注意:如果 needle 不是一個(gè)字符串,那么將被轉(zhuǎn)化為整型并被視為字符順序值。
$nl = chr(10);//\n ASCII echo nl2br($nl); $text = "Line 1\nLine 2\nLine 3"; $last = substr(strrchr($text, 10), 1 ); echo $last; //輸出: //<br /> //Line 3 strlen — 獲取字符串長(zhǎng)度
-
strnatcmp — 使用自然排序算法比較字符串
該函數(shù)實(shí)現(xiàn)了以人類(lèi)習(xí)慣對(duì)數(shù)字型字符串進(jìn)行排序的比較算法,這就是"自然順序"。
返回值:與其他字符串比較函數(shù)類(lèi)似,如果 str1 小于 str2 返回 < 0;如果 str1 大于 str2 返回 > 0;如果兩者相等,返回 0。
strnatcasecmp — 使用“自然順序”算法比較字符串(不區(qū)分大小寫(xiě))
-
strpbrk — 在字符串中查找一組字符的任何一個(gè)字符
返回一個(gè)以找到的字符開(kāi)始的子字符串。如果沒(méi)有找到,則返回 FALSE。
-
strrev — 反轉(zhuǎn)字符串
hello反轉(zhuǎn)后就是:olleh
-
strtok — 標(biāo)記分割字符串
返回值類(lèi)似于一個(gè)迭代器。如果不熟悉使用方式,分割字符串建議使用explode、preg_split。注意:split已經(jīng)不再建議使用,而str_split不支持指定分隔字符(串),是將字符串按單個(gè)字符分隔轉(zhuǎn)換成字符數(shù)組。
$string = "This is\tan example\nstring"; /* 使用制表符和換行符作為分界符 */ $tok = strtok($string, " \n\t"); while ($tok !== false) { echo "Word=$tok\n"; $tok = strtok(" \n\t"); }輸出:
Word=This Word=is Word=an Word=example Word=string strtolower — 將字符串轉(zhuǎn)化為小寫(xiě)
strtoupper — 將字符串轉(zhuǎn)化為大寫(xiě)
-
strtr — 轉(zhuǎn)換指定字符,可用于實(shí)現(xiàn)字符串替換,類(lèi)似于str_replace,但又更簡(jiǎn)潔實(shí)用
函數(shù)支持兩種方式:
strtr( string $str, string $from, string $to) : string strtr( string $str, array $replace_pairs) : string該函數(shù)返回 str 的一個(gè)副本,并將在 from 中指定的字符轉(zhuǎn)換為 to 中相應(yīng)的字符。比如,
n]中每次的出現(xiàn)都會(huì)被替換為
n],其中 $n 是兩個(gè)參數(shù)都有效的字符串位移(offset),通俗點(diǎn)說(shuō)就是字符串?dāng)?shù)組的下標(biāo)。
如果 from 與 to 長(zhǎng)度不相等,那么多余的字符部分將被忽略。 str 的長(zhǎng)度將會(huì)和返回的值一樣。
如果給出兩個(gè)參數(shù),第二個(gè)參數(shù)應(yīng)該是array形式的數(shù)組('from' => 'to',…)。返回值是一個(gè)字符串,其中所有出現(xiàn)的數(shù)組鍵都被相應(yīng)的值所替換。最長(zhǎng)的鍵將首先嘗試。一旦子字符串被替換,它的新值將不再被搜索,這個(gè)是有區(qū)別于str_replace前兩個(gè)參數(shù)都是數(shù)組的形式,str_replace會(huì)有先后替換順序。
echo strtr("baab", "ab", "01"),"\n"; $trans = array("ab" => "01"); echo strtr("baab", $trans),"\n"; $trans = array("a" => "apple","p"=>"pear"); echo strtr("a p", $trans),"\n"; echo str_replace(["a","p"], ["apple",'pear'], 'a p'),"\n";輸出:
1001 ba01 apple pear apearpearle pear -
substr — 返回字符串的子串
substr( string $string, int $start[, int $length] ) : string-
start
如果 start 是非負(fù)數(shù),返回的字符串將從 string 的 start 位置開(kāi)始,從 0 開(kāi)始計(jì)算。例如,在字符串 "abcdef" 中,在位置 0 的字符是 "a",位置 2 的字符串是 "c" 等等。
如果 start 是負(fù)數(shù),返回的字符串將從 string 結(jié)尾處向前數(shù)第 start 個(gè)字符開(kāi)始。
如果 string 的長(zhǎng)度小于 start,將返回 FALSE。
-
length
如果沒(méi)有提供 length,默認(rèn)返回的子字符串將從 start 位置開(kāi)始直到字符串結(jié)尾。
如果提供了正數(shù)的 length,返回的字符串將從 start 處開(kāi)始最多包括 length 個(gè)字符(取決于 string 的長(zhǎng)度)。
如果提供了負(fù)數(shù)的 length,那么 string 末尾處的 length 個(gè)字符將會(huì)被省略。
如果提供了值為 0,F(xiàn)ALSE 或 NULL 的 length,那么將返回一個(gè)空字符串。
-
```php
echo substr("abcdef", -2),"\n"; // 返回 "ef"
echo substr("abcdef", -3, 1),"\n"; // 返回 "d"
echo substr("abcdef", 0, -1),"\n"; // 返回 "abcde" 忽略末尾1個(gè)字符f
echo substr("abcdef", 2, -1),"\n"; // 返回 "cde" 忽略末尾1個(gè)字符f
echo substr("abcdef", 2, -4),"\n"; // 返回 ""
echo substr("abcdef", -3, -2),"\n"; // 返回 "d" 忽略末尾2個(gè)字符ef
```
-
substr_count — 計(jì)算子串出現(xiàn)的次數(shù)
substr_count( string $haystack, string $needle[, int $offset = 0[, int $length]] ) : int注意:該函數(shù)不會(huì)計(jì)算重疊字符串;函數(shù)還支持offset,即從哪里開(kāi)始查找計(jì)算;函數(shù)支持length,即查找到哪里;
$text = 'This is a test'; echo substr_count($text, 'is'),"\n"; // 2 $test = "xxxxx"; echo substr_count($test, "xx"),"\n";//2 -
substr_replace — 替換字符串的子串
substr_replace( mixed $string, mixed $replacement, mixed $start[, mixed $length] ) : mixed通俗上說(shuō),先通過(guò)start與length截取字符串中的子串,然后再將子串替換成replacement。相當(dāng)于substr+replace的功能。start與length參考substr函數(shù)。
$var = "-tsingchan-"; //將9ong插入到 $var 的開(kāi)頭處 echo substr_replace($var, '9ong', 0, 0) . "\n";//9ong-tsingchan- //下面兩個(gè)例子使用9ong替換 $var 中的 chan echo substr_replace($var, '9ong', 6, -1) . "\n";//-tsing9ong- echo substr_replace($var, '9ong', -5, -1) . "\n";//-tsing9ong- //從 $var 中刪除chan echo substr_replace($var, '', 6, -1) . "\n";//-tsing- -
substr_compare — 二進(jìn)制安全比較字符串(從偏移位置比較指定長(zhǎng)度)
截取子串后,再進(jìn)行比較字符串,但不是自然排序的比較。
-
trim — 去除字符串首尾處的空白字符(或者其他字符)
trim( string $str[, string $character_mask = " \t\n\r\0\x0B"] ) : stringtrim很簡(jiǎn)單,但又不是那么簡(jiǎn)單,主要看第二個(gè)參數(shù)character_mask:
character_mask是可選參數(shù),過(guò)濾字符也可由 character_mask 參數(shù)指定。一般要列出所有希望過(guò)濾的字符,也可以使用 ".." 列出一個(gè)字符范圍。
首先,character_mask默認(rèn)過(guò)濾空白符,包含空格、制表符、換行符、回車(chē)符等空白符;
其次,可以自定義character_mask字符,注意如果設(shè)置的是一個(gè)字符串(多字符),那么每個(gè)字符都會(huì)按trim的規(guī)則首尾檢查并對(duì)應(yīng)過(guò)濾,而不是過(guò)濾一個(gè)字符串;
最后,character_mask參數(shù)支持..來(lái)包含一個(gè)字符范圍,比如我們常用的ASCII控制符范圍。
官方文檔例子:
$text = "\t\tThese are a few words :) ... "; $binary = "\x09Example string\x0A"; $hello = "Hello World"; //var_dump($text, $binary, $hello); $trimmed = trim($text); echo $trimmed,"\n";//These are a few words :) ... $trimmed = trim($text, " \t.");//注意:尾巴的三個(gè).字符都被過(guò)濾 echo $trimmed,"\n";//These are a few words :) $trimmed = trim($hello, "Hdle");//注意:不是簡(jiǎn)單的過(guò)濾Hdle字符串,而4個(gè)字符H d l e一一在首尾檢查并過(guò)濾 echo ($trimmed),"\n";//o Wor // 清除 $binary 首位的 ASCII 控制字符 // (包括 0-31) $clean = trim($binary, "\x00..\x1F");//支持..范圍檢查過(guò)濾 echo $clean,"\n";//Example string -
ltrim — 刪除字符串開(kāi)頭的空白字符(或其他字符)
同trim,只是去除字符串左側(cè)(首部)的指定字符。
-
rtrim — 刪除字符串末端的空白字符(或者其他字符)
同trim,只是去除字符串右側(cè)(尾部)的指定字符。
-
vprintf — 輸出格式化字符串
vprintf( string $format, array $args) : int根據(jù) format (sprintf() 函數(shù)文檔中有相關(guān)描述)參數(shù)指定的格式,在一個(gè)格式化字符串中顯示多個(gè)值。
作用與 printf() 函數(shù)類(lèi)似,但是接收一個(gè)數(shù)組參數(shù),而不是一系列可變數(shù)量的參數(shù)。
vprintf("%04d-%02d-%02d", explode('-', '2020-1-1')); // 2020-01-01 vsprintf — 返回格式化字符串
```php
vsprintf( string $format, array $args) : string
```
注意是返回,而不是直接輸出。
作用與 sprintf() 函數(shù)類(lèi)似,但是接收一個(gè)數(shù)組參數(shù),而不是一系列可變數(shù)量的參數(shù)。
作用于vprintf一樣,但不直接輸出而是返回字符串。
```php
echo vsprintf("%04d-%02d-%02d", explode('-', '2020-1-1')); // 2020-01-01
```
- vfprintf — 將格式化字符串寫(xiě)入流
向由 handle 指定的流資源句柄中寫(xiě)入根據(jù) format 格式化后的字符串。 同vprintf,但多了個(gè)參數(shù)handle,是輸出寫(xiě)入流。
```php
vfprintf( resource $handle, string $format, array $args) : int
```
-
關(guān)于格式化字符串說(shuō)明符
% 文字百分比字符。不需要任何參數(shù)。 b 該參數(shù)被視為整數(shù),并以二進(jìn)制數(shù)表示。 c 該參數(shù)被視為整數(shù),并以該ASCII形式顯示為字符。 d 該參數(shù)被視為整數(shù),并以(有符號(hào)的)十進(jìn)制數(shù)表示。 e 該論點(diǎn)被視為科學(xué)記數(shù)法(例如1.2e + 2)。精度說(shuō)明符表示自PHP 5.2.1起小數(shù)點(diǎn)后的位數(shù)。在早期版本中,它被視為有效數(shù)字(少一位)。 E 類(lèi)似于說(shuō)明e符,但使用大寫(xiě)字母(例如1.2E + 2)。 f 該參數(shù)被視為浮點(diǎn)數(shù),并顯示為浮點(diǎn)數(shù)(可識(shí)別語(yǔ)言環(huán)境)。 F 該參數(shù)被視為浮點(diǎn)數(shù),并被表示為浮點(diǎn)數(shù)(不支持區(qū)域設(shè)置)。自PHP 5.0.3起可用。 o 該參數(shù)被視為整數(shù),并以八進(jìn)制數(shù)表示。 s 該參數(shù)被視為字符串顯示。 u 該參數(shù)被視為整數(shù),并以無(wú)符號(hào)十進(jìn)制數(shù)形式出現(xiàn)。 x 該參數(shù)被視為整數(shù),并以十六進(jìn)制數(shù)字(帶有小寫(xiě)字母)的形式呈現(xiàn)。 X 該參數(shù)被視為整數(shù),并以十六進(jìn)制數(shù)字(帶有大寫(xiě)字母)的形式呈現(xiàn)。 -
wordwrap — 打斷字符串為指定數(shù)量的字串
wordwrap( string $str[, int $width = 75[, string $break = "\n"[, bool $cut = FALSE]]] ) : string通過(guò)指定width寬度智能打斷字符串,插入break符號(hào),比如換行符。看函數(shù)名wordwrap,有接觸過(guò)css就大概知道函數(shù)的功能了,css的word-wrap屬性:允許長(zhǎng)單詞換行到下一行,達(dá)到自動(dòng)換行的效果。
如果 參數(shù)cut 設(shè)置為 TRUE,字符串總是在指定的 width 或者之前位置被打斷。因此,如果有的單詞寬度超過(guò)了給定的寬度,它將被分隔開(kāi)來(lái)。(參見(jiàn)第二個(gè)范例)。當(dāng)它是 FALSE ,函數(shù)不會(huì)分割單詞,哪怕 width 小于單詞寬度。
```php
$text = "A very long woooooooooooooooooord. and something";
$cut = false;
$newtext = wordwrap($text, 9, "\n", $cut);
echo "$newtext\n";
```
輸出:
```php
//如果cut為 false 則:
A very
long
woooooooooooooooooord.
and
something
```
```php
//如果cut為 true 則:
A very
long
woooooooo
ooooooooo
ord. and
something
```
本文內(nèi)容較長(zhǎng),如有被截?cái)嗷蛉笔?,?qǐng)參考原文:
PHP函數(shù)參考24-常用字符串函數(shù) - 9ong
PHP函數(shù)參考25-常用數(shù)組函數(shù) - 9ong