1. 程式人生 > 實用技巧 >php第四天-字串

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]] )把指定特殊符號轉換成實體,如&lt;&gt;
		'&' :'&amp;' 		'“':'&quot;'
		'''	:'&#039;'		'< ':'&lt;' 
		'>' :'&gt;' 
函式: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"