PHP的字串函式

小雨雨hi發表於2013-11-26

 

1、字串的連線

字串可以使用字串連線符(.)來連線


常見的用途是建立大塊的
HTML字串程式碼,賦值號
(=)
連線符
(.)

可以被簡寫合併為
(.=)

符號

 

2、在字串中使用變數


這個功能讓你無須使用連線符號來粘和大量的簡單字串

 


單引號串和雙引號串在
PHP中的處理是不相同的。雙引號串中的內容可以被解釋而且替換,而單引號串中的內容總被認為是普通字元。例如:

$foo = 2;
echo “foo is $foo”; //
列印結果
: foo is 2
echo `foo is $foo`; //

列印結果
: foo is $foo
echo “foo is $foo
“; //

列印結果
: foo is 2
(
同時換行)
echo `foo is $foo
`; //

列印結果
: foo is
$foo

 


為避免這些字串使用中的潛在問題,我們通常把複雜的變數從字串中分離開來,就像這樣:

echo `value = ` . $a[$i][$j];


還有一種辦法是將複雜變數用花括號括起來,語法分析器就能正確辨認了
:
echo “value = {$a[$i][$j]}” //
列印二維陣列$a的某個元素

這樣,又出現新問題了。當我們想在字串中引用花括號字元本身時,就要記得使用轉義符了:

$var = 3;
echo “value = {$var}”; //

列印結果
“value = 3”
echo “value = {$var}”; //

列印結果
“value =
{3}”

 

3字串的長度


長度

PHP
提供strlen函式來計算字串的長度:
$str = “test”;
echo strlen($str); //

將輸出
4
有點奇怪的是strlen將中日等漢字以及全形字元都當作兩個或四個長度計算。好在mbstringicon兩個函式可以幫助解決這個問題,比如:
$len = iconv_strlen($str, “GBK”);
$len = mb_strlen($str, “GBK”);

:mbstring模組提供了大量的對含有多位元組字元的字串的處理函式,推薦多加應用

 

4、字串的分隔與連線
PHP
允許你把一個字串按照一個分隔符進行分隔成一個陣列,或者將一個陣列組合成一個字串。看下面的例子:
$str = “i love iwind”;
$array = explode(” “, $str);

上面的
explode函式,就把$str字串按空格字元進行分隔,結果返回一個陣列$array:array(“i”, “love”,
“iwind”).
explode函式有類似功能的有:preg_split(), spliti(), split()等函式。

與此相反的,implodejoin則能把一個陣列結合成一個字串,他們是具有完全相同功能的函式。
$array = array(“i”, “love”, “iwind”);
$str = implode(” “, $array);

例中的
implode函式將陣列$array的每個元素用空格字元進行連線,返回一個字串
$str
“i love iwind”.

 

5、字串的裁剪
一個字串首和尾,可能不是你想要的部分,就可以用

trim去除一個字串的兩端空格,

rtrim去除一個字串的尾部空格,

ltrim去除一個字串的首部空格等函式

echo trim(” i love iwind “); //

將得到
“i love iwind”
echo rtrim(” i love iwind “); //

將得到
” i love
iwind”
echo ltrim(” i love iwind “); //

將得到
“i love iwind


其實這三個引數不僅可以去除字串首尾的空格,還可以去除它們的第二個引數指定的字元,如
:
echo trim(“,1,2,3,4,”, “,”); //

將得到
1,2,3,4

兩端的
“,”號被裁掉了。

有時還會看到有人使用chop這個函式,其實它是rtrim的同義函式

 

6、字串大小寫轉換
對於英文字母來說,可以用strtoupper,strtolower將其轉變成大寫或小寫。
echo strtoupper(“i love iwind”); //

將得到
I LOVE IWIND
echo strtolower(“I LOVE IWIND”); //

將得到
i love
iwind

 

7、字串的比較
一般可以用
!=, ==
比較兩個物件是否相等,只所以說是兩個物件,是因為它們不一定全部為字串,也可以為整型等等。比如

$a = “joe”;
$b = “jerry”;
if ($a != $b)
{
    
echo “
不相等“;
}
else
{
    
echo “
相等“;
}

如果用
!==,===(可以看到多了一個等號)比較的話,兩個物件的型別要嚴格相等才能返回true;否則用==,!=則會將字串自動轉換成相應的型別,以便進行比較.
22 == “22”; //

返回
true
22 === “22”; //

返回
false


正因為這樣,所以我們的程式時常會發生一些想不到的
意外
0 == “
我愛你“; //
返回
true
1 == “1

我愛你
“;//

返回
true

PHP裡還有這樣一組用於字串比較的函式:strcmp,strcasecmp,strncasecmp(),
strncmp()
,它們都是如果前者比後者大,則返回大於0的整數;如果前者比後者小,則返回小於0的整數;如果兩者相等,則返回0.它們比較的原理與

其它語言的規則都是一樣的。

strcmp
是用於區分大小寫(即大小寫敏感)的字串比較:
echo strcmp(“abcdd”, “aBcde”); //

返回
1
(>0),

比較的是
“b”“B”

strcasecmp用於不區分大小寫的字串比較:
echo strcasecmp(“abcdd”, “aBcde”); //

返回
-1
(<0),

比較的是
“d”“e”

strncmp用於比較字串的一部分,從字串的開頭開始比較,第三個引數,為要比較的長度:
echo strncmp(“abcdd”, “aBcde”, 3); //

返回
1
(>0),

比較了
abc

aBc

strncasecmp用於不區分大小寫的比較字串的一部分,從字串的開頭開始比較,第三個引數,為要比較的長度:
echo strncasecmp(“abcdd”, “aBcde”, 3); //

返回
0,

比較了
abc

aBc,

由於不區分大小寫,所以兩者是相同的。

還有一種情況是單單比較字串大小,達不到我們預定的要求,比如照常理
10.gif
會比
5.gif

大,但如果應用上面幾個函式,就會返回
-1,即表示
10.gif5.gif,針對這種情況,PHP提供了兩個自然對比的函式strnatcmp,strnatcasecmp
echo strnatcmp(“10.gif”, “5.gif”); //

返回
1
(>0)
echo strnatcasecmp(“10.GIF”, “5.gif”); //

返回
1
(>0)

 

8、字串的替換
替換的意義在於將一個字串的一部分進行改變,使之成為別外一個新的字串,以滿足新的要求。PHP裡通常用str_replace(“要替換的內容“, “要取代原內容的字串“, “原字串“)進行替換。
echo str_replace(“iwind”, “kiki”, “i love iwind, iwind said”);
//

將輸出
“i love kiki, kiki
said”

即將

原字串中的所有
“iwind”都替換成了“kiki”.

str_replace是大小寫敏感的,所以對你不能設想用
str_replace(“Iwind”,
“kiki”,…)
替換原字串中的“iwind”.

str_replace還可以實現多對一,多對多的替換,但無法實現一對多的替換:
echo str_replace(array(“iwind”, “kiki”), “people”, “i love kiki,
iwind said”);

將會輸出

i love people, people said
第一個引數中的array(“iwind”, “kiki”)都被替換成了“people”

echo str_replace(array(“iwind”, “kiki”), array(“gentle man”,
“ladies”), “i love kiki, iwind said”);

輸出
i love ladies, gentle
man said

。也就是說第一個陣列中的元素被第二個陣列中的相對應的元素替換掉了,如果有一個陣列比另一個陣列元素數要少,那麼不足的都會當作空來處理。

與此有些類似的是strtr,用法請參閱手冊,它們的比較請參閱http://diary.4kiki.net/index.php?action=info&id=372
.

此外,PHP還提供了substr_replace,實現替換一部分的字串。語法如下:
substr_replace (
原字串,
要替代的字串
,

開始替換的位置
[,

替換的長度
])
其中,開始替換的位置從0開始計算,應該小於原字串的長度。要替換的長度是可選的。
echo substr_replace(“abcdefgh”, “DEF”, 3); //

將輸出
“abcDEF”
echo substr_replace(“abcdefgh”, “DEF”, 3, 2); //


將輸出
“abcDEFfgh”

第一個例子中,從第三個位置(即
“d”)開始替換,從而把
“defgh”都替換成了“DEF”
第二個例子中,也是從第三個位置(即“d”)開始替換,但只能替換2個長度,即到e,所以就把“de”替換成了“DEF”.

PHP還提供了preg_replace,preg_replace_callback,ereg_replace,eregi_replace等函式應用正規表示式來完成字串替換

 

9、字串的查詢與匹配
PHP
裡用於查詢或者匹配或者定位的函式非常多,它們都有不同的意義

strstr,stristr.後者與前者的功能,返回值都一樣,只是不區分大小寫。
strstr(“
母字串“, “子字串“)用來查詢子字串在母字串中第一次出現的位置,並返回母字串中從子字串開始到母字串結束的部分。比如
echo strstr(“abcdefg”, “e”); //
將輸出
“efg”

如果找不到子字串,則返回空。因為可以用來判斷一個字串中是否含有另外一個字串:

$needle = “iwind”;
$str = “i love iwind”;
if (strstr($str, $needle))
{
    
echo “
裡面有
iwind”;
}
else
{
    
echo “
裡面沒有
iwind”;
}

將會輸出
裡面有
iwind”

HTML相關
1,htmlspecialchars($string)
這是它的最簡單用法,將字串中的一些特殊字元(顧名思義)&,`,”<,>轉換成它們對應的HTML實體形式:
$str = “i love <font
color=”red”>kiki</font>,
iwind said.”;
echo htmlspecialchars($str);

將會輸出

i love &lt;font
color=&quot;red&quot;&gt;kiki&lt;/font&gt;,
iwind said.

2,htmlentities($string)
將所有能轉換成實體形式的字元都轉換成實體形式。

3,html_entity_decode($string);
PHP4.3.0以後加入的具有與htmlentities($string)相反的功能。

4,nl2br($string)
將字串中所有換行符轉變成<br /> +

換行符。如:

$str = “i love kiki,
iwind said.”;
echo nl2br($str);

將會輸出

i love kiki,<br />
iwind said.

 

10、字串的加密
加密字串最常用的就是md5了,它將一個字串轉換成一個長32位的唯一的字串。
echo md5(“i love iwind”); //

將輸出
“2df89f86e194e66dc54b30c7c464c21c”

PHP5md5加了第二個引數,從而使它可以輸出16位的加密後的字串

 

11、查詢字元位置函式:
strpos($str,search,[int]):
查詢search$str中的第一次位置從int開始;
stripos($str,search,[int]):
函式返回字串在另一個字串中第一次出現的位置。該函式對大小寫不敏感
strrpos($str,search,[int]):
查詢search$str中的最後一次出現的位置從int

 

12、加空格函式
chunk_split($str,2);
$str字元裡面按2個字元就加入一個空格

 

13、資料庫相關函式
addslashes($str)
:使str內單引號(`)、雙引號()、反斜線()與 NUL

字串轉換為`,”,\
magic_quotes_gpc = On
自動對 get post cookie的內容進行轉義

get_magic_quotes_gpc()檢測是否開啟magic_quotes_gpc

stripslashes()
去除字串中的反斜槓

13、快速建立字串陣列的函式range()

比如range()函式可以快速建立從19的數字陣列:

<?php
$numbers=range(1,9);  
//
range直接建立1~99個數字組成的陣列,以“1”開始“9”結束。
echo
$numbers[1];       
//
輸出建立的第二個陣列值:2
echo
$numbers[0];
則輸入第一個值:0
?>

當然,使用range(9,1)則建立了91的數字陣列。同時,range()還可以建立從az
的字元陣列:

<?php
$numbers=range(a,z);
foreach ($numbers as
$mychrs)   
//
遍歷$numbers陣列,每次迴圈當前單元值被賦給$mychrs
echo $mychrs.”
“;                   
//output a b c d e f g h i j k l m n o p q r s t u v w x y z
?>

//foreach是一種遍歷陣列的簡便方法,foreach
僅能用於陣列,當試圖將其用於其它資料型別或者一個未初始化的變數時會產生錯誤,它有兩種格式:

foreach (array_expression as
$value)      
statementforeach (array_expression as $key =>
$value)      
statement
第一種格式遍歷給定的 array_expression 陣列。每次迴圈中,當前單元的值被賦給 $value
並且陣列內部的指標向前移一步(因此下一次迴圈中將會得到下一個單元)。第二種格式做同樣的事,只除了當前單元的鍵名也會在每次迴圈中被賦給變數
$key


使用字元陣列時注意大小寫,比如range(A,z)range(a,Z)是不一樣的。

range()函式還具有第三個引數,該引數的作用是設定步長,比如range(1,9,3)建立的陣列元素是:147

 

14、常規字串陣列的排序

一般陣列中的各元素均以字元或數字表現的,所以可對陣列元素進行升序排列,該功能函式為sort()。比如:

<?php
$people=array(`name`,`sex`,`nation`,`birth`);
foreach ($people as $mychrs)
    
echo $mychrs.” “;
sort($people);
echo “<br />—
排序後—<br
/>”;
foreach ($people as $mychrs)
    
echo $mychrs.” “;
?>

升序排序後的陣列元素顯示為 birth name
nation sex
,當然,sort()函式是區分字母大小寫的(字母從大到小的順序是:A…Z…a…z

Sort()函式還具有第二引數,用來說明升序的規則是用來比較數字還是字串的。比如:

<?php
echo “—
按數字升序排序—<br />”;
$num2=array(`26`,`3`,);
sort($num2,SORT_NUMERIC);
foreach ($num2 as $mychrs)
echo $mychrs.” “;

echo “<br
/>—
按字元升序排序—<br />”;
$num3=array(`26`,`3`);
sort($num3,SORT_STRING);
foreach ($num3 as $mychrs)
    
echo $mychrs.” “;
?>

SORT_NUMERICSORT_STRING用來宣告按數字或字元的升序排列。如果按照數字升序排列是:326;但如果按照字元升序排列則是:263了。

PHP中除了升序函式以外,還有降序或稱反向排列的函式,就是rsort()函式,比如:

$num1=range(1,9);
rsort($num1);               
//
這裡其實就相當於range(9,1)

 

15、關聯陣列的排序

PHP除了支援數字索引陣列以外,還支援相關陣列。比如如下陣列就是一個相關(關聯)陣列:

$peoples=array(`xm`=>`name`,`xb`=>`sex`,`mz`=>`nation`,`cs`=>`birth`);

使用sort($peoples)預設即是按照元素定義值的升序排序,在關聯陣列中可使用asort()函式表示按元素值升序排序,關聯陣列中最主要的則是可按照關鍵字(如xmxbmz等)的升序排序,該方法是用函式ksort()函式。

<?php
$peoples=array(`xm`=>`name`,`xb`=>`sex`,`mz`=>`nation`,`cs`=>`birth`);

foreach ($peoples as $mychrs)
    
echo $mychrs.” “;

echo “<br
/>–
按元素值升序排列–<br />”;
asort($peoples);
foreach ($peoples as $mychrs)
    
echo $mychrs.” “;

echo “<br
/>–
按關鍵字升序排列–<br />”;
ksort($peoples);
foreach ($peoples as $mychrs)
    
echo $mychrs.” “;
?>
和常規陣列擁有sort()升序函式的反向排序rsort()降序函式相對應的,關聯陣列也有對應的降序函式:asort()函式和arsort()函式、ksort()函式和krsort()函式。
記憶:原型函式是sort(),其中ak表示關聯陣列相關必須前置,反向排序使用r修飾。

 

16、陣列元素隨機排序

PHP中使用shuffle()函式將陣列元素進行隨機的重新排序,每次都會顯示不同的排序組合,比如:

<?php
$fer=array(`cnbruce`,`cnrose`,`cnjames`,`cnanne`);
shuffle($fer);        
//
隨即排序,每重新整理一次頁面則進行一次隨機排序。

foreach ($fer as
$mychrs)
echo $mychrs.” “;
?>

 

17PHP陣列按原順序反向排序

PHP中可使用array_reverse()函式將陣列元素按原順序反向排序。比如:

<?php
$fer=array(`cnbruce`,`cnrose`,`cnjames`,`cnanne`);
foreach ($fer as $mychrs)
echo $mychrs.” “;

$fer=array_reverse($fer);    
//
將陣列內元素按原順序反向排序
echo “<br
/>–
按原順序反向–<br />”;
foreach ($fer as $mychrs)
echo $mychrs.” “;
?>

output:   cnbruce cnrose
cnjames cnanne
              
按原順序反向
             
cnanne cnjames cnrose cnbruce

注意這裡的 $fer=array_reverse($fer);
在此之前的任何排序函式均只是宣告引用,並沒有對原有陣列進行重新定義,但當我除錯該函式時則需要重新定義。這是因為array_reverse()是返
回原陣列修改後的副本,如果不需要原有陣列,可對原陣列重新定義達到覆蓋的目的,否則就另外定義陣列儲存副本,比 如:$fer_bak=array_reverse($fer_bak);

 


相關文章