PHP函數(shù)參考24-常用字符串函數(shù)

本文內(nèi)容較長,如有被截斷或缺失疹瘦,請參考原文:
PHP函數(shù)參考24-常用字符串函數(shù) - 9ong
PHP函數(shù)參考25-常用數(shù)組函數(shù) - 9ong

  • addslashes — 使用反斜線引用字符串

    返回字符串媒吗,該字符串為了數(shù)據(jù)庫查詢語句等的需要在某些字符前加上了反斜線。這些字符是單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字符)。

    注意:PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默認(rèn)是 on舶沛, 實際上所有的 GET、POST 和 COOKIE 數(shù)據(jù)都用被 addslashes() 了窗价。 不要對已經(jīng)被 magic_quotes_gpc 轉(zhuǎn)義過的字符串使用 addslashes()如庭,因為這樣會導(dǎo)致雙層轉(zhuǎn)義。 遇到這種情況時可以使用函數(shù) get_magic_quotes_gpc() 進(jìn)行檢測撼港。

  • bin2hex — 函數(shù)把包含數(shù)據(jù)的二進(jìn)制字符串轉(zhuǎn)換為十六進(jìn)制值

  • hex2bin — 轉(zhuǎn)換十六進(jìn)制字符串為二進(jìn)制字符串

  • chop — rtrim 的別名

  • chr — 返回指定的字符

    返回相對應(yīng)于 ascii 所指定的單個字符坪它。

    此函數(shù)與 ord() 是互補(bǔ)的。

  • ord — 轉(zhuǎn)換字符串第一個字節(jié)為 0-255 之間的值

  • convert_uuencode — 使用 uuencode 編碼一個字符串

    convert_uuencode() 使用 uuencode 算法對一個字符串進(jìn)行編碼餐胀。

    uuencode 算法會將所有(含二進(jìn)制數(shù)據(jù))字符串轉(zhuǎn)化為可輸出的字符哟楷,并且可以被安全的應(yīng)用于網(wǎng)絡(luò)傳輸。使用 uuencode 編碼后的數(shù)據(jù)將會比源數(shù)據(jù)大35%左右否灾。

    用法同base64_encode卖擅,可以用于對二進(jìn)制數(shù)據(jù)的編碼。

  • convert_uudecode — 解碼一個 uuencode 編碼的字符串

  • count_chars — 返回字符串所用字符的信息

    count_chars( string $string[, int $mode = 0] ) : mixed
    

    統(tǒng)計 string 中每個字節(jié)值(0..255)出現(xiàn)的次數(shù)墨技,使用多種模式返回結(jié)果惩阶。

    mode參數(shù):

    0 - 以所有的每個字節(jié)值作為鍵名,出現(xiàn)次數(shù)作為值的數(shù)組扣汪。

    1 - 與 0 相同断楷,但只列出出現(xiàn)次數(shù)大于零的字節(jié)值。

  • crc32 — 計算一個字符串的 crc32 多項式

    生成 str 的 32 位循環(huán)冗余校驗碼多項式崭别。這通常用于檢查傳輸?shù)臄?shù)據(jù)是否完整冬筒。

  • crypt — 單向字符串散列

    password_hash()使用了一個強(qiáng)的哈希算法恐锣,來產(chǎn)生足夠強(qiáng)的鹽值,并且會自動進(jìn)行合適的輪次舞痰。password_hash()是crypt()的一個簡單封裝土榴,并且完全與現(xiàn)有的密碼哈希兼容。推薦使用password_hash()响牛。

  • echo — 輸出一個或多個字符串

  • explode — 使用一個字符串分割另一個字符串

  • implode — 將一個一維數(shù)組的值轉(zhuǎn)化為字符串

    explode與implode目前盡量按照分割符參數(shù)在前玷禽,字符串或數(shù)組在后

    注意:implode第一個參數(shù)分隔符可以忽略,也就是只有一個參數(shù)數(shù)組時呀打,會默認(rèn)使用空字符作為分隔符連接字符串矢赁。

    implode( string $glue, array $pieces) : string
    
    implode( array $pieces) : string
    

    注意:join函數(shù)是implode的別名

  • get_html_translation_table — 返回使用 htmlspecialchars 和 htmlentities 后的轉(zhuǎn)換表

    返回 htmlspecialchars() 和 htmlentities() 處理后的轉(zhuǎn)換表。

在很多自有框架中贬丛,我們常會看到內(nèi)部都有一個函數(shù)是用于手動替換html特殊符號的撩银,其實php自身帶了一個函數(shù)可以提供html特殊符號的函數(shù),不需要我們手動保存更新:

```php
print_r(get_html_translation_table(HTML_ENTITIES,ENT_COMPAT|ENT_QUOTES));    
```
```php
Array
(
    ["] => "
    [&] => &
    ['] => '
    [<] => &lt;
    [>] => &gt;
    [ ] => &nbsp;
    [?] => &iexcl;
    [¢] => &cent;
    [£] => &pound;
    [¤] => &curren;
    [¥] => &yen;
    [|] => &brvbar;
    [§] => &sect;
    [¨] => &uml;
    [?] => &copy;
    [a] => &ordf;
    [?] => &laquo;
    [?] => &not;
    ...
```
  • htmlentities — 將字符轉(zhuǎn)換為 HTML 轉(zhuǎn)義字符

    本函數(shù)各方面都和 htmlspecialchars() 一樣瘫寝,除了 htmlentities() 會轉(zhuǎn)換所有具有 HTML 實體的字符蜒蕾。

  • html_entity_decode — Convert HTML entities to their corresponding characters

    htmlentities 的反向解碼操作。

  • htmlspecialchars — 將特殊字符轉(zhuǎn)換為 HTML 實體

    通過get_html_translation_table函數(shù)可以知道焕阿,只有5個特殊符號被定義為htmlspecialchars:

    
    ["] => &quot;
    [&] => &amp;
    ['] => &#039;
    [<] => &lt;
    [>] => &gt;
    
  • htmlspecialchars_decode — 將特殊的 HTML 實體轉(zhuǎn)換回普通字符

    htmlspecialchars的反向解析操作。

  • lcfirst — 使一個字符串的第一個字符小寫

  • ucfirst — 將字符串的首字母轉(zhuǎn)換為大寫

  • ucwords — 將字符串中每個單詞的首字母轉(zhuǎn)換為大寫

    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 — 計算兩個字符串之間的編輯距離

  • md5_file — 計算指定文件的 MD5 散列值

  • md5 — 計算字符串的 MD5 散列值

    由于此函數(shù)依賴的算法已不足夠復(fù)雜,不推薦使用此函數(shù)對明文密碼加密。如果用于創(chuàng)建密碼哈希值毅桃,建議使用password_hash() - 創(chuàng)建密碼的散列(hash)

  • metaphone — 計算str的變音鍵

    與soundex()類似褒纲,metaphone為發(fā)音相似的單詞創(chuàng)建相同的鍵。它比soundex()更準(zhǔn)確钥飞,因為它知道英語發(fā)音的基本規(guī)則莺掠。變音位生成的鍵是可變長度的。

  • money_format — 將數(shù)字格式化成貨幣字符串

  • nl2br — 在字符串所有新行之前插入 HTML 換行標(biāo)記

    在字符串 string 所有新行之前插入 '<br />' 或 '<br>'读宙,并返回彻秆。
    可以理解為將\r\n替換成html換行標(biāo)簽<br />

  • number_format — 以千位分隔符方式格式化一個數(shù)字

  • parse_str — 將字符串解析成多個變量

    parse_str( string $encoded_string[, array &$result] ) : void
    

    如果 encoded_string 是 URL 傳遞入的查詢字符串(query string),則將它解析為變量并設(shè)置到當(dāng)前作用域(如果提供了 result 則會設(shè)置到該數(shù)組里 )结闸。

    注意:我們強(qiáng)烈建議一定要帶第二個參數(shù)result唇兑,變量將會以數(shù)組元素的形式存入到這個數(shù)組。該函數(shù)沒有返回值桦锄,將由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ù)(而是語言結(jié)構(gòu))扎附,所以可以不用圓括號包圍參數(shù)列表。

    和 echo 最主要的區(qū)別: print 僅支持一個參數(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
    

    更多模板格式化符號詳見官方文檔碍粥。

  • quotemeta — 轉(zhuǎn)義元字符集

    返回 在下面這些特殊字符前加 反斜線() 轉(zhuǎn)義后的字符串鳖眼。這些特殊字符包含:

    . \ + * ? [ ^ ] ( $ )

  • setlocale — 設(shè)置地區(qū)信息

  • sha1 — 計算字符串的 sha1 散列值

    由于此函數(shù)依賴的算法已不足夠復(fù)雜,不推薦使用此函數(shù)對明文密碼加密。

  • sha1_file — 計算文件的 sha1 散列值
    與md5_file相似即纲,但算法不一樣具帮。該散列值是一個 40 字符長度的十六進(jìn)制數(shù)字。 md5_file返回32字符長度的16進(jìn)制數(shù)字低斋。

  • similar_text — 計算兩個字符串的相似度

    兩個字符串的相似程度計算依據(jù) Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1) 的描述進(jìn)行蜂厅。注意該實現(xiàn)沒有使用 Oliver 虛擬碼中的堆棧,但是卻進(jìn)行了遞歸調(diào)用膊畴,這個做法可能會導(dǎo)致整個過程變慢或變快掘猿。也請注意,該算法的復(fù)雜度是 O(N**3)唇跨,N 是最長字符串的長度稠通。

    similar_text( string $first, string $second[, float &$percent] ) : int
    

    通過引用方式傳遞第三個參數(shù),similar_text() 將計算相似程度百分?jǐn)?shù)买猖。

    注意:返回值是兩個字符串中匹配字符的數(shù)目改橘。而我們通常要的是相似度百分?jǐn)?shù),也就是第三個參數(shù)percent玉控。

  • soundex — Calculate the soundex key of a string

    Soundex鍵具有發(fā)音相似的單詞會產(chǎn)生相同的Soundex鍵的屬性飞主,因此可以用來簡化在你知道發(fā)音但不知道拼寫的數(shù)據(jù)庫中的搜索。這個soundex函數(shù)返回一個以字母開頭的4個字符的字符串高诺。

  • sscanf — 根據(jù)指定格式解析輸入的字符

  • str_getcsv — 解析 CSV 字符串為一個數(shù)組

    以 CSV 字段格式解析字符串輸入碌识,并返回包含讀取字段的數(shù)組。

  • str_replace — 子字符串替換

    str_replace( mixed $search, mixed $replace, mixed $subject[, int &$count] ) : mixed
    

    如果 search 和 replace 為數(shù)組虱而,那么 str_replace() 將對 subject 做二者的映射替換筏餐。如果 replace 的值的個數(shù)少于 search 的個數(shù),多余的替換將使用空字符串來進(jìn)行牡拇。如果 search 是一個數(shù)組而 replace 是一個字符串魁瞪,那么 search 中每個元素的替換將始終使用這個字符串。該轉(zhuǎn)換不會改變大小寫诅迷。

    如果 search 和 replace 都是數(shù)組佩番,它們的值將會被依次處理。

    $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ù)組的時候罢杉,需要注意一個先后查找替換問題趟畏,一個特殊的范例:

    $letters = array('a', 'p');
    $fruit   = array('apple', 'pear');
    $text    = 'a p';
    $output  = str_replace($letters, $fruit, $text);
    echo $output;
    // 由于先查找了字符a,替換成apple滩租,之后再查找字符p赋秀,再將替換后的apple的兩個p字符又替換成pear
    // 輸出: apearpearle pear
    
  • str_ireplace — str_replace 的忽略大小寫版本

  • str_pad — 使用另一個字符串填充字符串為指定長度

    str_pad( string $input, int $pad_length[, string $pad_string = " "[, int $pad_type = STR_PAD_RIGHT]] ) : string
    

    支持左右填充指定字符利朵,并指定長度,默認(rèn)STR_PAD_RIGHT向右填充猎莲。

    注意:如果填充字符的長度不能被 pad_string 整除绍弟,那么 pad_string 可能會被縮短。

    官方范例:

    $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ù)一個字符串

    str_repeat( string $input, int $multiplier) : string
    

    返回 字符串input 重復(fù) multiplier 次后的結(jié)果字符串著洼。

    echo str_repeat("-=", 5);
    //-=-=-=-=-=
    
  • str_rot13 — 對字符串執(zhí)行 ROT13 轉(zhuǎn)換

    在比較舊的php代碼中我們也會看一些借鑒str_rot13的加密算法樟遣,可以用來混淆∩眢裕可能混淆算法不一定采用之后的第13個字符替換法豹悬。

    ROT13 編碼簡單地使用字母表中后面第 13 個字母替換當(dāng)前字母,同時忽略非字母表中的字符液荸。編碼和解碼都使用相同的函數(shù)瞻佛,傳遞一個編碼過的字符串作為參數(shù),將得到原始字符串娇钱。

    echo str_rot13("Tsing1");//Gfvat1
    
    echo str_rot13("Gfvat1");//Tsing1
    
    
  • str_shuffle — 隨機(jī)打亂一個字符串

    每次返回都是隨機(jī)的伤柄,不一樣的字符串

  • str_split — 將字符串轉(zhuǎn)換為數(shù)組

    將一個字符串轉(zhuǎn)換為數(shù)組,如果第二個參數(shù)默認(rèn)是1時文搂,返回的就是字符數(shù)組适刀,字符串的每個字符就是數(shù)組中的一個元素。

    第二參數(shù)是將返回的數(shù)組的每個元素的長度煤蹭,比如設(shè)置為3蔗彤,則返回的數(shù)組中的每個元素都是長度為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ū)分大小寫)

  • strncmp — 二進(jìn)制安全比較字符串開頭的若干個字符

  • strncasecmp — 二進(jìn)制安全比較字符串開頭的若干個字符(不區(qū)分大小寫)

  • strip_tags — 從字符串中去除 HTML 和 PHP 標(biāo)記

    該函數(shù)嘗試返回給定的字符串 str 去除空字符姨裸、HTML 和 PHP 標(biāo)記后的結(jié)果。

    注意:由于 strip_tags() 無法實際驗證 HTML怨酝,不完整或者破損標(biāo)簽將導(dǎo)致更多的數(shù)據(jù)被刪除傀缩。

  • stripslashes — 反轉(zhuǎn)義一個使用類似使用addslashes 轉(zhuǎn)義的字符串

  • strpos — 查找字符串首次出現(xiàn)的位置

    strpos( string $haystack, mixed $needle[, int $offset = 0] ) : int
    

    在字符串haystack中查找字符needle,返回needle在haystack中首次出現(xiàn)的數(shù)字位置农猬。

    needle:建議一定要是字符串赡艰。

    offset:如果提供了此參數(shù),搜索會從字符串該字符數(shù)的起始位置開始統(tǒng)計斤葱。如果是負(fù)數(shù)慷垮,搜索會從字符串結(jié)尾指定字符數(shù)開始揖闸。

返回 needle 存在于 haystack 字符串起始的位置(獨立于 offset)。同時注意字符串位置是從0開始料身,而不是從1開始的汤纸。如果沒找到 needle,將返回 FALSE芹血。 

注意:strpos的參數(shù)順序贮泞,和explode等其他字符串函數(shù)不大一樣,strpos第一個參數(shù)是完整字符串幔烛,第二個參數(shù)needle是用于查找的子串或字符啃擦。
  • stripos — 查找字符串首次出現(xiàn)的位置(不區(qū)分大小寫)

  • strrpos — 計算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置

    注意:區(qū)別于strpos指定字符在目標(biāo)字符串最后一次出現(xiàn)的位置。

  • strripos — 計算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置(不區(qū)分大小寫)

  • strstr — 查找字符串的首次出現(xiàn)说贝,并返回第一次出現(xiàn)的位置開始到結(jié)尾的字符串

    strstr( string $haystack, mixed $needle[, bool $before_needle = FALSE] ) : string
    

    返回 haystack 字符串從 needle 第一次出現(xiàn)的位置開始到 haystack 結(jié)尾的字符串议惰。

    注意:strchr函數(shù)是strstr的別名函數(shù)

    $url  = 'http://www.9ong.com';
    $domain = strstr($url, '//');
    echo $domain; // 輸出://www.9ong.com
    
  • stristr — strstr 函數(shù)的忽略大小寫版本

  • strrchr — 查找指定字符在字符串中的最后一次出現(xiàn)

    該函數(shù)返回 haystack 字符串中的一部分,這部分以 needle 的最后出現(xiàn)位置開始乡恕,直到 haystack 末尾言询。

    注意:該函數(shù)對應(yīng)正向函數(shù)是strchr也就是strstr,如果strrchr函數(shù)的needle參數(shù)包含不止一個字符傲宜,僅使用第一個字符运杭。該參數(shù)行為不同于strstr函數(shù)。

    注意:如果 needle 不是一個字符串函卒,那么將被轉(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 — 獲取字符串長度

  • strnatcmp — 使用自然排序算法比較字符串

    該函數(shù)實現(xiàn)了以人類習(xí)慣對數(shù)字型字符串進(jìn)行排序的比較算法,這就是"自然順序"报嵌。

    返回值:與其他字符串比較函數(shù)類似虱咧,如果 str1 小于 str2 返回 < 0;如果 str1 大于 str2 返回 > 0锚国;如果兩者相等腕巡,返回 0。

  • strnatcasecmp — 使用“自然順序”算法比較字符串(不區(qū)分大小寫)

  • strpbrk — 在字符串中查找一組字符的任何一個字符

    返回一個以找到的字符開始的子字符串血筑。如果沒有找到绘沉,則返回 FALSE。

  • strrev — 反轉(zhuǎn)字符串

    hello反轉(zhuǎn)后就是:olleh

  • strtok — 標(biāo)記分割字符串

    返回值類似于一個迭代器豺总。如果不熟悉使用方式车伞,分割字符串建議使用explode、preg_split喻喳。注意:split已經(jīng)不再建議使用另玖,而str_split不支持指定分隔字符(串),是將字符串按單個字符分隔轉(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)化為小寫

  • strtoupper — 將字符串轉(zhuǎn)化為大寫

  • strtr — 轉(zhuǎn)換指定字符日矫,可用于實現(xiàn)字符串替換赂弓,類似于str_replace,但又更簡潔實用

    函數(shù)支持兩種方式:

    strtr( string $str, string $from, string $to) : string
    
    strtr( string $str, array $replace_pairs) : string
    

    該函數(shù)返回 str 的一個副本哪轿,并將在 from 中指定的字符轉(zhuǎn)換為 to 中相應(yīng)的字符盈魁。比如, from[n]中每次的出現(xiàn)都會被替換為 to[n]窃诉,其中 $n 是兩個參數(shù)都有效的字符串位移(offset)杨耙,通俗點說就是字符串?dāng)?shù)組的下標(biāo)。

    如果 from 與 to 長度不相等飘痛,那么多余的字符部分將被忽略珊膜。 str 的長度將會和返回的值一樣。

    如果給出兩個參數(shù)宣脉,第二個參數(shù)應(yīng)該是array形式的數(shù)組('from' => 'to'车柠,…)。返回值是一個字符串塑猖,其中所有出現(xiàn)的數(shù)組鍵都被相應(yīng)的值所替換竹祷。最長的鍵將首先嘗試。一旦子字符串被替換羊苟,它的新值將不再被搜索塑陵,這個是有區(qū)別于str_replace前兩個參數(shù)都是數(shù)組的形式,str_replace會有先后替換順序蜡励。

    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 位置開始,從 0 開始計算凉倚。例如兼都,在字符串 "abcdef" 中,在位置 0 的字符是 "a"稽寒,位置 2 的字符串是 "c" 等等俯抖。

      如果 start 是負(fù)數(shù),返回的字符串將從 string 結(jié)尾處向前數(shù)第 start 個字符開始瓦胎。

      如果 string 的長度小于 start,將返回 FALSE尤揣。

    • length

      如果沒有提供 length搔啊,默認(rèn)返回的子字符串將從 start 位置開始直到字符串結(jié)尾。

      如果提供了正數(shù)的 length北戏,返回的字符串將從 start 處開始最多包括 length 個字符(取決于 string 的長度)负芋。

      如果提供了負(fù)數(shù)的 length,那么 string 末尾處的 length 個字符將會被省略。

      如果提供了值為 0旧蛾,F(xiàn)ALSE 或 NULL 的 length莽龟,那么將返回一個空字符串。

```php
echo substr("abcdef", -2),"\n";    // 返回 "ef"
echo substr("abcdef", -3, 1),"\n"; // 返回 "d"
echo substr("abcdef", 0, -1),"\n";  // 返回 "abcde" 忽略末尾1個字符f
echo substr("abcdef", 2, -1),"\n";  // 返回 "cde" 忽略末尾1個字符f
echo substr("abcdef", 2, -4),"\n";  // 返回 ""
echo substr("abcdef", -3, -2),"\n"; // 返回 "d" 忽略末尾2個字符ef
```
  • substr_count — 計算子串出現(xiàn)的次數(shù)

    substr_count( string $haystack, string $needle[, int $offset = 0[, int $length]] ) : int
    

    注意:該函數(shù)不會計算重疊字符串锨天;函數(shù)還支持offset毯盈,即從哪里開始查找計算;函數(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
    

    通俗上說,先通過start與length截取字符串中的子串益缠,然后再將子串替換成replacement脑奠。相當(dāng)于substr+replace的功能。start與length參考substr函數(shù)幅慌。

    $var = "-tsingchan-";
    //將9ong插入到 $var 的開頭處
    echo substr_replace($var, '9ong', 0, 0) . "\n";//9ong-tsingchan-
    
    //下面兩個例子使用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)制安全比較字符串(從偏移位置比較指定長度)

    截取子串后宋欺,再進(jìn)行比較字符串,但不是自然排序的比較胰伍。

  • trim — 去除字符串首尾處的空白字符(或者其他字符)

    trim( string $str[, string $character_mask = " \t\n\r\0\x0B"] ) : string
    

    trim很簡單齿诞,但又不是那么簡單,主要看第二個參數(shù)character_mask:

    character_mask是可選參數(shù)喇辽,過濾字符也可由 character_mask 參數(shù)指定掌挚。一般要列出所有希望過濾的字符,也可以使用 ".." 列出一個字符范圍菩咨。

    首先吠式,character_mask默認(rèn)過濾空白符,包含空格抽米、制表符特占、換行符、回車符等空白符云茸;

    其次是目,可以自定義character_mask字符,注意如果設(shè)置的是一個字符串(多字符)标捺,那么每個字符都會按trim的規(guī)則首尾檢查并對應(yīng)過濾懊纳,而不是過濾一個字符串;

    最后亡容,character_mask參數(shù)支持..來包含一個字符范圍嗤疯,比如我們常用的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.");//注意:尾巴的三個.字符都被過濾
    echo $trimmed,"\n";//These are a few words :)
    
    $trimmed = trim($hello, "Hdle");//注意:不是簡單的過濾Hdle字符串闺兢,而4個字符H d l e一一在首尾檢查并過濾
    echo ($trimmed),"\n";//o Wor
    
    // 清除 $binary 首位的 ASCII 控制字符
    // (包括 0-31)
    $clean = trim($binary, "\x00..\x1F");//支持..范圍檢查過濾
    echo $clean,"\n";//Example string
    
  • ltrim — 刪除字符串開頭的空白字符(或其他字符)

    同trim茂缚,只是去除字符串左側(cè)(首部)的指定字符。

  • rtrim — 刪除字符串末端的空白字符(或者其他字符)

    同trim,只是去除字符串右側(cè)(尾部)的指定字符脚囊。

  • vprintf — 輸出格式化字符串

    vprintf( string $format, array $args) : int
    

    根據(jù) format (sprintf() 函數(shù)文檔中有相關(guān)描述)參數(shù)指定的格式龟糕,在一個格式化字符串中顯示多個值。

    作用與 printf() 函數(shù)類似悔耘,但是接收一個數(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ù)類似,但是接收一個數(shù)組參數(shù)泄鹏,而不是一系列可變數(shù)量的參數(shù)郎任。 

作用于vprintf一樣,但不直接輸出而是返回字符串备籽。

```php
echo vsprintf("%04d-%02d-%02d", explode('-', '2020-1-1')); // 2020-01-01
```
  • vfprintf — 將格式化字符串寫入流
向由 handle 指定的流資源句柄中寫入根據(jù) format 格式化后的字符串舶治。 同vprintf,但多了個參數(shù)handle车猬,是輸出寫入流霉猛。

```php
vfprintf( resource $handle, string $format, array $args) : int
```
  • 關(guān)于格式化字符串說明符

    %   文字百分比字符。不需要任何參數(shù)珠闰。
    b   該參數(shù)被視為整數(shù)惜浅,并以二進(jìn)制數(shù)表示。
    c   該參數(shù)被視為整數(shù)伏嗜,并以該ASCII形式顯示為字符坛悉。
    d   該參數(shù)被視為整數(shù),并以(有符號的)十進(jìn)制數(shù)表示承绸。
    e   該論點被視為科學(xué)記數(shù)法(例如1.2e + 2)裸影。精度說明符表示自PHP 5.2.1起小數(shù)點后的位數(shù)。在早期版本中军熏,它被視為有效數(shù)字(少一位)轩猩。
    E   類似于說明e符,但使用大寫字母(例如1.2E + 2)荡澎。
    f   該參數(shù)被視為浮點數(shù)均践,并顯示為浮點數(shù)(可識別語言環(huán)境)。
    F   該參數(shù)被視為浮點數(shù)摩幔,并被表示為浮點數(shù)(不支持區(qū)域設(shè)置)浊猾。自PHP 5.0.3起可用。    
    o   該參數(shù)被視為整數(shù)热鞍,并以八進(jìn)制數(shù)表示。
    s   該參數(shù)被視為字符串顯示。
    u   該參數(shù)被視為整數(shù)薇宠,并以無符號十進(jìn)制數(shù)形式出現(xiàn)偷办。
    x   該參數(shù)被視為整數(shù),并以十六進(jìn)制數(shù)字(帶有小寫字母)的形式呈現(xiàn)澄港。
    X   該參數(shù)被視為整數(shù)椒涯,并以十六進(jìn)制數(shù)字(帶有大寫字母)的形式呈現(xiàn)。
    

    參考:PHP: vsprintf - Manual

  • wordwrap — 打斷字符串為指定數(shù)量的字串

    wordwrap( string $str[, int $width = 75[, string $break = "\n"[, bool $cut = FALSE]]] ) : string
    

    通過指定width寬度智能打斷字符串回梧,插入break符號废岂,比如換行符∮猓看函數(shù)名wordwrap湖苞,有接觸過css就大概知道函數(shù)的功能了,css的word-wrap屬性:允許長單詞換行到下一行详囤,達(dá)到自動換行的效果财骨。

    如果 參數(shù)cut 設(shè)置為 TRUE,字符串總是在指定的 width 或者之前位置被打斷藏姐。因此隆箩,如果有的單詞寬度超過了給定的寬度,它將被分隔開來羔杨。(參見第二個范例)捌臊。當(dāng)它是 FALSE ,函數(shù)不會分割單詞兜材,哪怕 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)容較長,如有被截斷或缺失护姆,請參考原文:
PHP函數(shù)參考24-常用字符串函數(shù) - 9ong
PHP函數(shù)參考25-常用數(shù)組函數(shù) - 9ong

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載矾端,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末卵皂,一起剝皮案震驚了整個濱河市秩铆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌灯变,老刑警劉巖殴玛,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異添祸,居然都是意外死亡滚粟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門刃泌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凡壤,“玉大人署尤,你說我怎么就攤上這事⊙窍溃” “怎么了曹体?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長硝烂。 經(jīng)常有香客問我箕别,道長,這世上最難降的妖魔是什么滞谢? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任串稀,我火速辦了婚禮,結(jié)果婚禮上狮杨,老公的妹妹穿的比我還像新娘母截。我一直安慰自己,他們只是感情好禾酱,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布微酬。 她就那樣靜靜地躺著,像睡著了一般颤陶。 火紅的嫁衣襯著肌膚如雪颗管。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天滓走,我揣著相機(jī)與錄音垦江,去河邊找鬼。 笑死搅方,一個胖子當(dāng)著我的面吹牛比吭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姨涡,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼衩藤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涛漂?” 一聲冷哼從身側(cè)響起赏表,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匈仗,沒想到半個月后瓢剿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡悠轩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年间狂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片火架。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡鉴象,死狀恐怖忙菠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纺弊,我是刑警寧澤只搁,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站俭尖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏洞翩。R本人自食惡果不足惜稽犁,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骚亿。 院中可真熱鬧已亥,春花似錦、人聲如沸来屠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俱笛。三九已至捆姜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間迎膜,已是汗流浹背泥技。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留磕仅,地道東北人珊豹。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像榕订,于是被迫代替她去往敵國和親店茶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容