php字符串是php中一種數(shù)據(jù)類型了,字符串在程序開發(fā)中占著很重的地位,下面我來給php入門者介紹php字符串的一些基于知識(shí)與使用說明吧。
輸出字符串
在PHP中,有四種方法輸出字符串,echo結(jié)構(gòu)可以一次輸出多個(gè)值;print()只可以輸出一個(gè)值;printf()可以格式化輸出;print_r()可以輸出數(shù)組,對(duì)調(diào)試很有好處,下面一一進(jìn)行介紹。
1.echo
echo 是PHP的一個(gè)關(guān)鍵字,它沒有返回值,在寫法上,它可以省略小括號(hào),實(shí)例代碼如下:
- echo 'Test String';
- echo('Test String');
2.print
print 也是PHP的一個(gè)關(guān)鍵字,它有返回值,一般返回true,返回false的情況應(yīng)該沒有,在寫法上,它和echo一樣,可以省略小括號(hào),如下代碼:
- print 'Test String';
- print('Test String');
3.printf
printf可以像C語言的printf一樣,格式化輸出一個(gè)字符串,它的格式和C語言差不多,都是以%開頭,其說明符定義如下。
b 參數(shù)為整數(shù),顯示其二進(jìn)制
c 參數(shù)為整數(shù),顯示對(duì)應(yīng)ASCII字符
d 參數(shù)為整數(shù),顯示其十進(jìn)制
f 參數(shù)為雙精度,顯示為浮點(diǎn)數(shù)
e 參數(shù)為雙精度,顯示為科學(xué)計(jì)數(shù)型
g 參數(shù)為雙精度,顯示為浮點(diǎn)數(shù)或科學(xué)計(jì)數(shù)型
o 參數(shù)為整數(shù),顯示其八進(jìn)制
s 參數(shù)為字符串,顯示為字符串
u 參數(shù)為無符號(hào)整數(shù),顯示其十進(jìn)制
x/X 參數(shù)為整數(shù),顯示其十六進(jìn)制(分別為大小寫顯示)
% 輸出%
要說明的是:
f,e默認(rèn)小數(shù)點(diǎn)后六位,g在超過六位(加小數(shù)點(diǎn))時(shí),會(huì)四舍五入,如果四舍五入之后的值小于1000000會(huì)直接輸出,大于的1000000的話會(huì)顯示成科學(xué)計(jì)數(shù)型,f在值大于1.2e23輸出的結(jié)果是不對(duì)的。
以上除%以外,其它的都可以指定輸出總位數(shù)(小數(shù)點(diǎn)、E都算一位),并可以指定0或空格為補(bǔ)位符,還可以指定補(bǔ)位在左還是在右。
f,e可以指定小數(shù)點(diǎn)后位數(shù)。
如 %5d 表示輸出總位數(shù)為5,不足左補(bǔ)空格; %05d 表示輸出總位數(shù)為5,不足左補(bǔ)0; %05.1f 表示輸出總位數(shù)為5,不足左補(bǔ)0,小數(shù)點(diǎn)后1位; %-05.1f 表示輸出總位數(shù)為5,不足右補(bǔ)0,小數(shù)點(diǎn)后1位;
示例代碼如下:
- printf("%7.2f", 1.2); // " 1.20"
- printf("%-07.2f", 1.2); // "1.20000"
4.sprintf
sprintf和格式轉(zhuǎn)換和printf一樣,兩者區(qū)別在于printf直接輸出,而sprintf返回一個(gè)格式化后的字符串。
5.print_r和var_dump
print_r和var_dump都能輸出數(shù)組和對(duì)象,但print_r對(duì)布爾型的輸出不太明顯;var_dump輸出比較詳細(xì),一般調(diào)試時(shí)用得多,如下代碼:
- $v = new test();
- print_r($v);
- var_dump($v);
- class test {
- public $num = 1;
- public $str = "222";
- public $bln = true;
- function test() {
- global $num;
- }
- }
- /*
- 結(jié)果為:
- test Object
- (
- [num] => 1
- [str] => 222
- [bool] => 1
- )
- object(test)#1 (3) {
- ["num"]=>
- int(1)
- ["str"]=>
- string(3) "222"
- ["bool"]=>
- bool(true)
- }
- */
字符串比較和查找
1.字符串比較
在PHP中,可以用==(雙等號(hào))或者 ===(三等號(hào))來比較字符串,兩者的區(qū)別是雙等號(hào)不比較類型,三等號(hào)會(huì)比較類型,它不轉(zhuǎn)換類型;用雙等號(hào)進(jìn)行比較時(shí),如果等號(hào)左右兩邊有數(shù)字類型的值,剛會(huì)把另一個(gè)值轉(zhuǎn)化為數(shù)字,然后進(jìn)行比較,這樣的話,如果是純字符串或者NULL時(shí),會(huì)轉(zhuǎn)化為0進(jìn)行比較,同樣,大小于號(hào)也和等號(hào)一樣,比較時(shí)可能出現(xiàn)不正確的結(jié)果。
所以,比較字符串可以用PHP的自帶函數(shù)strcmp和strcasecmp,其中strcasecmp是strcmp的變種,它會(huì)先把字符串轉(zhuǎn)化為小寫再進(jìn)行比較,如下代碼:
- var_dump(0 == 'Test');
- var_dump(0 == '');
- var_dump(5 > 'T');
- var_dump(strcmp(5, 'T'));
- /*
- 結(jié)果為(第1~3結(jié)果是不對(duì)的,只有第4個(gè)是對(duì)的):
- bool(true)
- bool(true)
- bool(true)
- int(-1)
- */
2.字符串處理
(1).子串,代碼如下:
$sub = substr(string, start[, length]);
(2).子串替換,代碼如下:
$newstring = substr_replace(string, new, start[, length]);
用這個(gè)函數(shù)可以實(shí)現(xiàn)字符串的插入,刪除操作,這個(gè)函數(shù)的start和length可以為負(fù)數(shù),分別表示從后開始計(jì)算以及保留最后幾位不替換。
(3).字符串反序,代碼如下:
$newstring = strrev(string);
(4).重復(fù)字符串,代碼如下:
$newstring = str_repeat(string, count);
返回一個(gè)重復(fù)count次string的新字符串。
(5).填充字符串,代碼如下:
$newstring = str_pad(to_pad, length[, with[, type]]);
其中type有:STR_PAD_RIGHT(默認(rèn))、STR_PAD_LEFT和STR_PAD_BOTH三種;with默認(rèn)為空格,函數(shù)表示把to_pad字符串用with填充為一個(gè)長度為length的字符串,如下代碼:
- // 子串
- var_dump(substr('1234567890', 8)); // 90
- var_dump(substr('1234567890', 0, 2)); // 12
- // 反方向子串
- var_dump(substr('1234567890', -8)); // 34567890
- var_dump(substr('1234567890', -8, -2)); // 345678
- var_dump(substr('1234567890', -8, 2)); // 34
- // 插入
- var_dump(substr_replace('1234567890', 'a', 0, 0)); // a1234567890
- // 刪除
- var_dump(substr_replace('1234567890', '', 8)); // 12345678
- // 反方向刪除
- var_dump(substr_replace('1234567890', '', -2, -1)); // 123456780
- // 替換
- var_dump(substr_replace('1234567890', 'a', 0, 1)); // a234567890
- // 反方向替換
- var_dump(substr_replace('1234567890', 'a', -2, -1)); // 12345678a0
- // 字符串反轉(zhuǎn)
- var_dump(strrev('1234567890')); // 0987654321
- // 重復(fù)字符串
- var_dump(str_repeat('12', 3)); // 121212
- // 填充字符串
- var_dump(str_pad('a', 10, '12')); // a121212121
- var_dump(str_pad('a', 10, '12', STR_PAD_LEFT)); // 121212121a
- var_dump(str_pad('a', 10, '12', STR_PAD_BOTH)); // 1212a12121
3.分解字符串
在PHP中,字符串的分解用explode,合并用implode(join是implode的別名),標(biāo)記用strtok,還有另一個(gè)函數(shù)slipt也可以分解(正則分解),但5.3以后版本已經(jīng)不推介了, 另外PHP中還有一個(gè)sscanf()函數(shù),用于讀取字符串。
strtok標(biāo)記時(shí),用strtok($str, $token)來初始化,用strtok($token)來繼續(xù)取值,代碼如下:
- $str = '1,2,3';
- $arr1 = explode(',', $str); // array('1', '2', '3')
- $arr2 = explode(',', $str, 2); // array('1', '2,3')
- $str1 = implode(',', $arr1); // '1,2,3'
- $str2 = strtok($str, ','); // 1
- $str3 = strtok(','); // 2
- $str4 = strtok(','); // 3
- // array(86, 10, 88888888, 'Beijin')
- $arr3 = sscanf('+86(10)88888888 Beijin', '+%d(%d)%d %s');
4.字符串查找
在PHP中,字符串的查找有三個(gè)系列,返回位置的、返回字符串的、掩碼個(gè)數(shù)匹配,其中,返回位置的的函數(shù)一共有兩個(gè),strpos()和strrpos();返回字符串的也有兩個(gè)strstr()和strchr();返回掩碼匹配數(shù)的函數(shù)有strspn()和strcspn()。
strpos表示從左邊開始計(jì)數(shù),返回要查找的字符串第一次出現(xiàn)的位置;strrpos表示從右邊計(jì)數(shù),返回要查找的字符串第一次出現(xiàn)的位置。
strstr表示從左邊計(jì)數(shù),返回要查找字符串第一次到結(jié)尾的子串(包括查找字符串),當(dāng)查找的是字符時(shí),可以用ascii碼數(shù)字來表示字符;stristr表示不區(qū)分大小查找;strchr是strstr的別名;strrchr返回字符最后出現(xiàn)到結(jié)尾的子串。
strspn表示從左邊計(jì)數(shù),第一次出現(xiàn)非掩碼之前的子串的字符數(shù);strcspn表示從左邊計(jì)數(shù),第一次出現(xiàn)掩碼之前的子串的字符數(shù)。
示例代碼如下:
- $pos = strpos('This a hello world program', ' '); // 4
- $pos = strpos('This a hello world program', 32); // 4
- $pos = strrpos('This a hello world program', ' '); // 18
- $pos = strrpos('This a hello world program', 32); // 18
- $str = strstr('This a hello world program', ' '); // " a hello world program"
- $str = strstr('This a hello world program', 32); // " a hello world program"
- $str = stristr('This a hello world program', ' A'); // "a hello world program"
- $str = stristr('This a hello world program', 65); // "a hello world program"
- $str = strrchr('This a hello world program', ' '); // " program"
- $str = strrchr('This a hello world program', 32); // " program"
- $str1 = "12345 12345 12345";
- $len = strspn($str1, '12345'); // 5
- $len = strcspn($str1, ' '); //5
常用的字符串操作
1.訪問單個(gè)字符
在PHP中,可以把字符串當(dāng)成一個(gè)字符的數(shù)組,可以直接用數(shù)組的訪問方法來訪問字符串。如$str[0]。
在這里要注意的是,如果字符是ASCII碼以外時(shí),訪問會(huì)有問題,因?yàn)檫@種訪問只能取得一個(gè)字節(jié)。
2.刪除空白字符
在PHP中,可以用trim(), ltrim(), rtrim()三個(gè)函數(shù)來刪除字符串開頭或結(jié)尾的空白字符。
其中,trim()用于刪除字符前后的空白字符;ltrim()用于刪除字符左側(cè)的空白字符;rtrim()用于刪除字符右側(cè)的空白字符。
在默認(rèn)情況下,會(huì)刪除以下字符:空格( |Ox20)、制表符TAB(n|Ox09)、換行(n|OxOA)、回車(r|0x0D)、空字符(|Ox00)。
也可以自己在參數(shù)里指定。
3.改變大小寫
strtolower() 把整個(gè)字符串轉(zhuǎn)化為小寫。
strtoupper() 把整個(gè)字符串轉(zhuǎn)化為大寫。
ucfirst() 把字符串的第一個(gè)字符轉(zhuǎn)化為大寫,其它字符不變。
ucwords() 把字符串里的每一個(gè)單詞的第一個(gè)字符轉(zhuǎn)為大寫,其它字符不變。
4.HTML轉(zhuǎn)義
HTML轉(zhuǎn)義是指把字符串轉(zhuǎn)化成HTML顯示用的字符串,對(duì)此,PHP中有兩個(gè)函數(shù)實(shí)現(xiàn)此功能。
htmlentities() 把除空格外的所有可以轉(zhuǎn)換的字符都轉(zhuǎn)成HTML形式。
htmlspecialchars() 把必要的(與符號(hào)&、雙引號(hào)、單引號(hào)、大于號(hào)、小于號(hào))轉(zhuǎn)化為HTML形式。
5.URL轉(zhuǎn)義
URL轉(zhuǎn)義是指把字符串轉(zhuǎn)化成URL字符串,對(duì)此,PHP中有兩個(gè)函數(shù)實(shí)現(xiàn)此功能。
urlencode()和urldecode()是把空格轉(zhuǎn)成+號(hào),其它的轉(zhuǎn)成URL字符串,前者轉(zhuǎn)換,后者反轉(zhuǎn)換
rawurlencode()和rawurldecode()是把空格轉(zhuǎn)成%20號(hào),即普通URL字符串,其它的轉(zhuǎn)成URL字符串,前者轉(zhuǎn)換,后者反轉(zhuǎn)換
6.SQL轉(zhuǎn)義
跟PHP最相關(guān)的兩個(gè)數(shù)據(jù)庫(MySQL和PostgreSQL)都是以反斜杠為轉(zhuǎn)義符的(Oracle是自己定義,其它數(shù)據(jù)庫沒有測試),對(duì)此PHP中用addslashes()函數(shù)來添加這些反斜杠,用stripcslashes()函數(shù)來刪除這些反斜杠
新聞熱點(diǎn)
疑難解答