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

本文內(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) : string
    
    implode( 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
(
    ["] => "
    [&] => &
    ['] => '
    [<] => &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() 會(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:

    
    ["] => &quot;
    [&] => &amp;
    ['] => &#039;
    [<] => &lt;
    [>] => &gt;
    
  • 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
    

    在字符串haystack中查找字符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)的字符。比如, from[n]中每次的出現(xiàn)都會(huì)被替換為 to[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"] ) : string
    

    trim很簡(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)。
    

    參考:PHP: vsprintf - Manual

  • 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容