php第四天-字串
0x01 字串
1.1 字串的處理方式
在不同的語言中,字串的處理方式不同:在C中字串是作為位元組陣列處理的;在Java中字串是作為物件處理的;而在php中則把字串作為基本資料型別來處理。
通常對字串的處理涉及字串的格式化、字串的分割和連線、字串的比較、以及字串的查詢、匹配和替換。
1.2 字串型別的特點
0x02 常用的字串輸出函式
常用的輸出字串函式:
echo( ) -- 輸出字串
print( ) -- 輸出一個字串
die( ) -- 輸出一條訊息,並退出當前指令碼
printf( ) -- 輸出格式化字串
sprintf( )-- 把格式化的字串寫入一個變數中
注意:這裡的printf與sprintf都是格式化字串。
字串轉換格式:
%% 返回百分比符號
%b 二進位制數
%c 依照ASCII值的字元
%d 帶符號十進位制數
%e 可續計數法(如1.5e3)
%u 無符號十進位制數
%f或%F 浮點數
%o 八進位制數
%s 字串
%x或%X 十六進位制數
示例:
<?php
echo 'hello','word','!';
?>
輸出helloword!
<?php
print "Hello world";
?>
輸出:Hello world
<?php
die("1")
?>
輸出1
格式:printf("引數1",引數2):引數1=按什麼格式輸出;引數2=輸出的變數。 <?php $num=10.000; printf("%d<br/>",$num); //10 printf("%s<br/>",$num); //10 printf("%f<br/>",$num); //10.000000 printf("%b<br/>",$num); //1010 printf("%o<br/>",$num); //12 ?>
輸出
<?php
$num=10.000;
$a=sprintf("%d",$num);
echo $a;
?>
輸出10
注意:雙引號可以包含單引號,但單引號不會被解析;單引號也能包含雙引號
0x03 常用的字串格式化函式
去除空格和字串填充補函式
字串大小寫的轉換
和HTML標籤相關聯的字串格式化
其他字串格式化函式
3.1 去除空格和字串填充補函式
3.1.1
函式:ltrim( ) 語法: string ltrim(string str[, string charlist] ); 返回值: 字串 本函式用來刪去字串中的前導空格 (whitespace)。 <?php $str = " yicunyiye"; echo "Without ltrim: " . $str; echo "<br>"; echo "With ltrim: " . ltrim($str); ?>
輸出
Without ltrim: yicunyiye
With ltrim: yicunyiye
3.1.2
函式:rtrim( ) (還有個別名:chop())
語法: string rtrim(string str[, string charlist] );
返回值: 字串
本函式用來刪去字串中的字尾空格 (whitespace)。
<?php
$str = "yicunyiye ";
echo "Without rtrim: " . $str;
echo "With rtrim: " . rtrim($str);
echo "Without rtrim: " . $str;
?>
輸出
Without rtrim: yicunyiye With rtrim: yicunyiyeWithout rtrim: yicunyiye
3.1.3
函式:trim( )
截去字串首尾的空格。
語法: string trim(string str[, string charlist] );
返回值: 字串
本函式返回字串 string 首尾的空白字元去除後的字串。
<?php
$str = "\n\n\nyicunyiye\n\n\n";
echo "Without trim: " . $str;
echo "<br>";
echo "With trim: " . trim($str);
?>
輸出
Without trim:
yicunyiye
With trim: yicunyiye
3.1.4
函式:str_pad() 按需求對字串進行填充。
語法:string str_pad ( string input, int pad_length [, string pad_string [, int pad_type]] )
STR_PAD_LEFT 字串左添補
STR_PAD_RIGHT 字串右添補
STR_PAD_BOTH 字串兩端添補
<?php
$input = "yicunyiye";
var_dump(str_pad($input,100,".",STR_PAD_RIGHT));
var_dump(str_pad($input,50,"=", STR_PAD_LEFT));
var_dump(str_pad($input,100,"_", STR_PAD_BOTH));
var_dump(str_pad($input,50 ,"___"));
?>
輸出
string(100) "yicunyiye..........................................................................................." string(50) "=========================================yicunyiye" string(100) "_____________________________________________yicunyiye______________________________________________" string(50) "yicunyiye_________________________________________"
3.2 字串大小寫的轉換
3.2.1
函式: strtolower( )
語法: string strtolower(string str);
本函式將字串 str 全部變小寫字串。
函式: strtoupper( )
語法: string strtoupper(string str);
本函式將字串 str 全部變大寫字串。
函式:ucfirst( )
將字串第一個字元改大寫。
語法: string ucfirst(string str);
本函式返回字串 str 第一個字的字首字母改成大寫。
函式:ucwords( )
將字串每個字第一個字母改大寫。
語法: string ucwords(string str);
本函式返回字串 str 每個字的字首字母全都改成大寫。
示例:
<?php
echo strtolower("yicunyiye<br>");
echo strtoupper("yicunyiye<br>");
echo ucfirst("yicunyiye<br>");
echo ucwords("yicunyiye<br>");
?>
輸出
yicunyiye YICUNYIYE Yicunyiye Yicunyiye
3.3 和HTML標籤相關聯的字串格式化
函式:nl2br( )
語法:string nl2br ( string string )將字串中”\n”轉成HTML換行符“<br / >”
函式:htmlspecialchars()
語法:string htmlspecialchars ( string string [, int quote_style [, string charset]] )把指定特殊符號轉換成實體,如<>
'&' :'&' '“':'"'
''' :''' '< ':'<'
'>' :'>'
函式:string strip_tags()
語法:string strip_tags ( string str [, string allowable_tags] )刪除HTML的標籤函式
<?php $text = ‘<p>Test paragraph.</p><!-- Comment --> Other text’; echo strip_tags($text); //Test paragraph. Other text echo “\n”; // 保留 <p> echo strip_tags($text, '<p>');
//輸出:<p>Test paragraph.</p> Other text
?>
示例:
<?php
echo nl2br("yicunyiye\n");
echo htmlspecialchars("<scRipT>alert(1)</scRIpt>");
echo strip_tags("Hello <b>world!</b>");
?>
輸出
yicunyiye
Hello world!
延申:htmlspecialchars_decode():把一些預定義的 HTML 實體轉換為字元
會被解碼的 HTML 實體是:
& 解碼成 & (和號)
" 解碼成 " (雙引號)
' 解碼成 ' (單引號)
< 解碼成 < (小於)
> 解碼成 > (大於)
3.4 其他字串格式化函式
函式: strrev( )
顛倒字串。將字串前後顛倒。
語法: string strrev(string string);
函式: strlen( )
取得字串長度。
語法: int strlen(string str);
本函式返回指定的字串長度。
示例:
<?php
$info = "yicunyiye";
var_dump(strrev($info));
var_dump($info);
var_dump(strlen($info))
?>
輸出
string(9) "eyiynuciy" string(9) "yicunyiye" int(9)
函式:number_format()
語法:string number_format ( float number [, int decimals [, string dec_point, string thousands_sep]] )
格式貨幣、數字、時間等。
示例:
<?php
$str1 = "10000";
echo number_format($str1)."<br>";
?>
輸出>10,000
函式:md5() 加密函式
格式:string md5 (string str [, bool raw_output] )
示例:
<?php
$str = "Hello";
echo md5($str);
?>
輸出>8b1a9953c4611296a827abf8c47804d7
0x04 字串比較函式
按位元組順序進行字串比較
按自然順序進行字串比較
4.1 按位元組順序進行字串比較
strcmp();(整個比較是否相同)
strncmp();(指定比較長度的字串比較)
strcasecmp(); (不區分大小寫的全串比較)
示例:
<?php
var_dump(strcmp("1233","123"));
var_dump(strncmp("1233","1233",'4'));
echo strnatcmp("2Hello world!","2Hello world!");
?>
輸出
int(1) int(0) 0
4.2 按自然順序進行字串比較
strnatcmp();
示例:
<?php
echo strnatcmp("2Hello world!","10Hello world!");
echo "<br>";
echo strnatcmp("10Hello world!","2Hello world!");
?>
輸出
-1
1
0x05 字串其他函式
5.1 字串的模糊比較
similar_text(); (返回相似字串的個數)
示例:
<?php
similar_text("Hello World","Hello yicunyiye",$percent);
echo $percent;
?>
輸出
46.1538461538
5.2 字串的分割與拼裝
explode -- 使用一個字串分割另一個字串
語法:array explode ( string separator, string string [, int limit] )
此函式返回由字串組成的陣列,每個元素都是 string 的一個子串,它們被字串 separator 作為邊界點分割出來。如果設定了 limit 引數,則返回的陣列包含最多 limit 個元素,而最後那個元素將包含 string 的剩餘部分。
implode()
用一組較小的字串建立一個大字串。
格式:string implode ( string glue, array pieces )
第一個引數glue是放在第二個引數pieces的元素之間的字串。可以像下面這樣重建簡單的逗號分隔的字串。
示例:
<?php
$info = "1,2,3";
var_dump(explode(",", $info));
$array = [1,2,3];
var_dump(implode(",",$array));
?>
輸出
array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" } string(5) "1,2,3"
5.3 字串的擷取
函式:substr( )
取部份字串。
語法: string substr(string string, int start, int [length]);
返回值: 字串
本函式將字串 string 的第 start 位起的字串取出 length 個字元,若省略引數 length,則取到字串末尾 。若 start 為負數,則從字串尾端往前開始提取。如果length為整數,表示返回length個字元,若為負數,則表示取到倒數第 length 個字元。
示例:
<?php
echo substr("Hello world",10)."<br>";
echo substr("Hello world",1)."<br>";
echo substr("Hello world",3)."<br>";
echo substr("Hello world",7)."<br>";
echo substr("Hello world",-1)."<br>";
echo substr("Hello world",-10)."<br>";
echo substr("Hello world",-8)."<br>";
echo substr("Hello world",-4)."<br>";
?>
輸出
d
ello world
lo world
orld
d
ello world
lo world
orld
5.4 字串的查詢
函式: strstr( ) 別名:strchr( )
返回字串中某字串開始處至結束的字串。
語法: string strstr(string haystack, string needle);
返回值: 字串
本函式將 needle 最先出現在 haystack 處起至 haystack 結束的字串返回。若找不到 needle 則返回 false。
函式: strrchr()
取得某字元最後出現的位置。
語法: string strrchr(string haystack, string needle);
本函式用來尋找字串 haystack 中的字元 needle 最後出現位置,並將此位置起至字串 haystack 結束之間的字串返回。若沒有找到 needle 則返回 false。
示例:
<?php
$info = "1234562789";
var_dump(strstr($info,"2"));
var_dump(strrchr($info,"2"));
?>
輸出
string(9) "234562789" string(4) "2789"
函式:strpos()
尋找字串中某字元最先出現的位置。預設從 0 開始。
語法: int strpos(string haystack, string needle, int [offset]);
本函式用來尋找字串 haystack 中的字元 needle 最先出現的位置。若找不到指定的字元,則返回 false 值。引數 offset 可省略,用來表示從 offset 開始找。
函式:strrpos( )
尋找字串中某字元最後出現的位置。
語法: int strrpos(string haystack, char needle);
返回值: 整數
本函式用來尋找字串 haystack 中的字元 needle 最後出現的位置。若找不到指定的字元,則返回 false 值。
示例:
<?php
echo strpos("hello, yicunyiye","yi");
echo "<br>";
echo strrpos("hello, yicunyiye","yi");
?>
輸出
7
12
5.5 字串的替換
str_replace()
字串替換,三種替換方式:
str_replace(string $search, string $replace, string $str);
str_replace(array $search, string $replace, string $str);
str_replace(array $search, array $replace, string $str);
示例:
<?php
$info = "yicunyiye";
var_dump(str_replace("y","a",$info));
var_dump(str_replace(["y","c","e"],"a",$info));
var_dump(str_replace(["y","c","e"],["a","b","c"],$info));
?>
輸出
string(9) "aicunaiae" string(9) "aiaunaiaa" string(9) "aibunaiac"