----- 最后更新【2021-10-12】-----
一、語法
1、字符串的4種聲明方式:
在php語法當(dāng)中,一個字符串可以用 4 種方式表達(dá),它們分別是:單引號
、雙引號
嵌戈、heredoc語法結(jié)構(gòu)
、nowdoc語法結(jié)構(gòu)
听皿。
1)單引號
要表達(dá)一個單引號自身熟呛,需在它的前面加個反斜線\
來轉(zhuǎn)義,即\'
尉姨。要表達(dá)一個反斜線自身惰拱,則用兩個反斜線\\
。其它任何方式的反斜線都會被當(dāng)成反斜線本身啊送,即在單引號字符串中的變量和特殊字符的轉(zhuǎn)義序列將不會被替換(例如\r
或者\n
也是不會被轉(zhuǎn)義偿短,也是原樣輸出)。
2)雙引號
如果字符串是包圍在雙引號" "
中馋没, PHP 將對一些特殊的字符進(jìn)行解析昔逗。
當(dāng) PHP 解析器遇到一個美元符號$
時,它會和其它很多解析器一樣篷朵,去組合盡量多的標(biāo)識以形成一個合法的變量名勾怒∑排牛可以用花括號{}
來明確變量名的界線。
3)heredoc 語法結(jié)構(gòu)
第三種表達(dá)字符串的方法是用 heredoc 語法結(jié)構(gòu):<<<
笔链。在該運算符之后要提供一個標(biāo)識符段只,然后換行。接下來是字符串string本身鉴扫,最后要用前面定義的標(biāo)識符作為結(jié)束標(biāo)志赞枕。
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
Warning: 要注意的是結(jié)束標(biāo)識符這行除了可能有一個分號;
外,絕對不能包含其它字符坪创。這意味著標(biāo)識符不能縮進(jìn)炕婶,分號的前后也不能有任何空白或制表符。
4)nowdoc 語法結(jié)構(gòu)
就象 heredoc 結(jié)構(gòu)類似于雙引號字符串莱预,Nowdoc 結(jié)構(gòu)是類似于單引號字符串的柠掂。Nowdoc 結(jié)構(gòu)很像 heredoc 結(jié)構(gòu),但是 nowdoc 中不進(jìn)行解析操作依沮。這種結(jié)構(gòu)很適合用于嵌入 PHP 代碼或其它大段文本而無需對其中的特殊字符進(jìn)行轉(zhuǎn)義拴竹。
一個 nowdoc 結(jié)構(gòu)也用和 heredocs 結(jié)構(gòu)一樣的標(biāo)記<<<
雏搂, 但是跟在后面的標(biāo)識符要用單引號括起來碳想,即<<<'EOT'
见擦。Heredoc 結(jié)構(gòu)的所有規(guī)則也同樣適用于 nowdoc結(jié)構(gòu),尤其是結(jié)束標(biāo)識符的規(guī)則姥饰。
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
注意:
--單引號比雙引號效率更高。
--當(dāng)雙引號里面包含單引號孝治,然后單引號里面包含變量列粪,這種情況變量也是會正常解析的,同時單引號會原樣輸出谈飒。
2岂座、存取和修改字符串中的字符:
string 中的字符可以通過一個從 0 開始的下標(biāo),用類似 array 結(jié)構(gòu)中的方括號包含對應(yīng)的數(shù)字來訪問和修改杭措,比如$str[42]
费什。也可用花括號訪問,比如 $str{42}
手素≡е罚可以把 string 當(dāng)成字符組成的 array。函數(shù) substr()
和 substr_replace()
可用于操作多于一個字符的情況泉懦。
3稿黍、轉(zhuǎn)換成字符串
1)自動轉(zhuǎn)換
在一個需要字符串的表達(dá)式中,會自動轉(zhuǎn)換為 string崩哩。比如在使用函數(shù) echo 或 print 時巡球,或在一個變量和一個 string 進(jìn)行比較時言沐,就會發(fā)生這種轉(zhuǎn)換。
2)強制轉(zhuǎn)換
在PHP中酣栈,數(shù)據(jù)類型的轉(zhuǎn)換屬于強制轉(zhuǎn)換险胰,且共有三種轉(zhuǎn)換方式:
一個值可以通過在其前面加上(string)
或用strval()
函數(shù)來轉(zhuǎn)變成字符串。
在一個需要字符串的表達(dá)式中矿筝,會自動轉(zhuǎn)換為 string起便。也可參考函數(shù)settype()
,如settype($var, "string");
跋涣。
二缨睡、常用函數(shù)
1、子字符串操作
1)substr—返回字符串的子串
string substr( string $string, int $start [, int $length ] )
返回字符串 string 由 start 和 length 參數(shù)指定的子字符串陈辱。
substr("abcdef", -3, 1); // 返回 "d"
substr('abcdef', 1, 3); // bcd
注意: 一個漢字等于3個UTF_8字符
$a = '第二部分';
substr($a, 0, 3); // 返回 "第"
substr($a, 0, 4); // 返回 "第?"奖年,后面會多一個亂碼
2)substr_replace—替換字符串的子串
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
substr_replace()
在字符串 string 的副本中將由 start 和可選的 length 參數(shù)限定的子字符串使用 replacement 進(jìn)行替換。返回結(jié)果字符串沛贪。如果 string 是個數(shù)組陋守,那么也將返回一個數(shù)組。
Tip: 在用于長文本隱藏時非常有用(如用...
來替換后面的字符串)利赋。
3)str_replace—子字符串替換(搜索替換)
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
該函數(shù)返回一個字符串或者數(shù)組水评。該字符串或數(shù)組是將 subject 中全部的 search 都被 replace 替換之后的結(jié)果。
如果沒有一些特殊的替換需求(比如正則表達(dá)式)媚送,你應(yīng)該使用該函數(shù)替換 ereg_replace()
和 preg_replace()
中燥。
類似的方法有:
preg_replace
- 執(zhí)行一個正則表達(dá)式的搜索和替換
4)strpos—查找字符串首次出現(xiàn)的位置
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
返回 needle 在 haystack 中首次出現(xiàn)的數(shù)字位置。
$newstring = 'abcdef abcdef';
$pos = strpos($newstring, 'a'); //$pos = 0
$pos = strpos($newstring, 'a', 1); // $pos = 7, 不是 0
與該方法類似的還有:
stripos
- 查找字符串首次出現(xiàn)的位置(不區(qū)分大小寫)
strrpos
- 計算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置
strripos
- 計算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置(不區(qū)分大小寫)
5)strstr—查找字符串的首次出現(xiàn)塘偎;別名也叫strchr
string strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] )