php字串是php中一種資料類型了,字串在程式開發中佔著很重的地位,下面我來給php入門者介紹php字串的一些基於知識與使用說明吧。
輸出字串
在PHP中,有四種方法輸出字串。echo結構可以一次輸出多個值;print()只可以輸出一個值;printf()可以格式化輸出;print_r()可以輸出數組,對調試很有好處。下面一一進行介紹。
1. echo
echo 是PHP的一個關鍵字,它沒有傳回值。在寫法上,它可以省略小括弧。如下代碼:
| 代碼如下 |
複製代碼 |
echo 'Test String'; echo('Test String'); |
2. print
print 也是PHP的一個關鍵字,它有傳回值,一般返回true,返回false的情況應該沒有。在寫法上,它和echo一樣,可以省略小括弧。如下代碼:
| 代碼如下 |
複製代碼 |
print 'Test String'; print('Test String');
|
3. printf
printf可以像C語言的printf一樣,格式化輸出一個字串。它的格式和C語言差不多,都是以%開頭。其說明符定義如下。
b 參數為整數,顯示其二進位
c 參數為整數,顯示對應ASCII字元
d 參數為整數,顯示其十進位
f 參數為雙精確度,顯示為浮點數
e 參數為雙精確度,顯示為科學計數型
g 參數為雙精確度,顯示為浮點數或科學計數型
o 參數為整數,顯示其八進位
s 參數為字串,顯示為字串
u 參數為不帶正負號的整數,顯示其十進位
x/X 參數為整數,顯示其十六進位(分別為大小寫顯示)
% 輸出%
要說明的是:
f,e預設小數點後六位,g在超過六位(加小數點)時,會四捨五入,如果四捨五入之後的值小於1000000會直接輸出,大於的1000000的話會顯示成科學計數型。f在值大於1.2e23輸出的結果是不對的。
以上除%以外,其它的都可以指定輸出總位元(小數點、E都算一位),並可以指定0或空格為補位符,還可以指定補位在左還是在右。
f,e可以指定小數點後位元。
如 %5d 表示輸出總位元為5,不足左補空格; %05d 表示輸出總位元為5,不足左補0; %05.1f 表示輸出總位元為5,不足左補0,小數點後1位; %-05.1f 表示輸出總位元為5,不足右補0,小數點後1位;
範例程式碼:
| 代碼如下 |
複製代碼 |
printf("%7.2f", 1.2); // " 1.20" printf("%-07.2f", 1.2); // "1.20000"
|
4. sprintf
sprintf和格式轉換和printf一樣,兩者區別在於printf直接輸出,而sprintf返回一個格式化後的字串。
5. print_r和var_dump
print_r和var_dump都能輸出數組和對象,但print_r對布爾型的輸出不太明顯;var_dump輸出比較詳細,一般調試時用得多。
如下代碼:
| 代碼如下 |
複製代碼 |
$v = new test(); print_r($v); var_dump($v); class test { public $num = 1; public $str = "222"; public $bln = true; function test() { global $num; } }
|
結果為:
| 代碼如下 |
複製代碼 |
test Object ( [num] => 1 [str] => 222 [bool] => 1 ) object(test)#1 (3) { ["num"]=> int(1) ["str"]=> string(3) "222" ["bool"]=> bool(true) } |
字串比較和尋找
1. 字串比較
在PHP中,可以用==(雙等號)或者 ===(三等號)來比較字串。兩者的區別是雙等號不比較類型,三等號會比較類型,它不轉換類型;用雙等號進行比較時,如果等號左右兩邊有數字類型的值,剛會把另一個值轉化為數字,然後進行比較。這樣的話,如果是純字串或者NULL時,會轉化為0進行比較。同樣,大小於符號也和等號一樣,比較時可能出現不正確的結果。
所以,比較字串可以用PHP的內建函數strcmp和strcasecmp。其中strcasecmp是strcmp的變種,它會先把字串轉化為小寫再進行比較。 如下代碼:
| 代碼如下 |
複製代碼 |
var_dump(0 == 'Test'); var_dump(0 == ''); var_dump(5 > 'T'); var_dump(strcmp(5, 'T')); |
結果為(第1~3結果是不對的,只有第4個是對的):
bool(true)
bool(true)
bool(true)
int(-1)
2. 字串處理
1. 子串
| 代碼如下 |
複製代碼 |
| $sub = substr(string, start[, length]); |
2. 子串替換
$newstring = substr_replace(string, new, start[, length]);
用這個函數可以實現字串的插入,刪除操作。這個函數的start和length可以為負數。分別表示從後開始計算以及保留最後幾位不替換。
3. 字串反序
| 代碼如下 |
複製代碼 |
$newstring = strrev(string); |
4. 重複字串
| 代碼如下 |
複製代碼 |
$newstring = str_repeat(string, count); |
返回一個重複count次string的新字串。
5. 填充字串
$newstring = str_pad(to_pad, length[, with[, type]]);
其中type有:STR_PAD_RIGHT(預設)、STR_PAD_LEFT和STR_PAD_BOTH三種;with預設為空白格。函數表示把to_pad字串用with填充為一個長度為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 // 字串反轉 var_dump(strrev('1234567890')); // 0987654321 // 重複字串 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的別名),標記用strtok。還有另一個函數slipt也可以分解(正則分解),但5.3以後版本已經不推介了。 另外PHP中還有一個sscanf()函數,用於讀取字串。
strtok標記時,用strtok($str, $token)來初始化,用strtok($token)來繼續取值。
代碼如下:
| 代碼如下 |
複製代碼 |
$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中,字串的尋找有三個系列。返回位置的、返回字串的、掩碼個數匹配。其中,返回位置的的函數一共有兩個,strpos()和strrpos();返回字串的也有兩個strstr()和strchr();返回掩碼匹配數的函數有strspn()和strcspn()。
strpos表示從左邊開始計數,返回要尋找的字串第一次出現的位置;strrpos表示從右邊計數,返回要尋找的字串第一次出現的位置。
strstr表示從左邊計數,返回要尋找字串第一次到結尾的子串(包括尋找字串),當尋找的是字元時,可以用ascii碼數字來表示字元;stristr表示不區分大小尋找;strchr是strstr的別名;strrchr返回字元最後出現到結尾的子串。
strspn表示從左邊計數,第一次出現非掩碼之前的子串的字元數;strcspn表示從左邊計數,第一次出現掩碼之前的子串的字元數。
範例程式碼:
| 代碼如下 |
複製代碼 |
$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. 訪問單個字元
在PHP中,可以把字串當成一個字元的數組,可以直接用數組的存取方法來訪問字串。如$str[0]。
在這裡要注意的是,如果字元是ASCII碼以外時,訪問會有問題。因為這種訪問只能取得一個位元組。
2. 刪除空白字元
在PHP中,可以用trim(), ltrim(), rtrim()三個函數來刪除字串開頭或結尾的空白字元。
其中,trim()用於刪除字元前後的空白字元;ltrim()用於刪除字元左側的空白字元;rtrim()用於刪除字元右側的空白字元。
在預設情況下,會刪除以下字元:空格( |Ox20)、定位字元TAB(n|Ox09)、換行(n|OxOA)、斷行符號(r|0x0D)、Null 字元(|Ox00)。
也可以自己在參數裡指定。
3. 改變大小寫
strtolower() 把整個字串轉化為小寫。
strtoupper() 把整個字串轉化為大寫。
ucfirst() 把字串的第一個字元轉化為大寫,其它字元不變。
ucwords() 把字串裡的每一個單詞的第一個字元轉為大寫,其它字元不變。
4. HTML轉義
HTML轉義是指把字串轉化成HTML顯示用的字串。對此,PHP中有兩個函數實現此功能。
htmlentities() 把除空格外的所有可以轉換的字元都轉成HTML形式。
htmlspecialchars() 把必要的(與符號&、雙引號、單引號、大於符號、小於符號)轉化為HTML形式。
5. URL轉義
URL轉義是指把字串轉化成URL字串。對此,PHP中有兩個函數實現此功能。
urlencode()和urldecode()是把空格轉成+號,其它的轉成URL字串,前者轉換,後者反轉換
rawurlencode()和rawurldecode()是把空格轉成%20號,即普通URL字串,其它的轉成URL字串,前者轉換,後者反轉換
6. SQL轉義
跟PHP最相關的兩個資料庫(MySQL和PostgreSQL)都是以反斜線為轉義符的(Oracle是自己定義,其它資料庫沒有測試),對此PHP中用addslashes()函數來添加這些反斜線,用stripcslashes()函數來刪除這些反斜線
http://www.bkjia.com/PHPjc/628630.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/628630.htmlTechArticlephp字串是php中一種資料類型了,字串在程式開發中佔著很重的地位,下面我來給php入門者介紹php字串的一些基於知識與使用說明吧。...