1、字符串的連接
字符串可以使用字符串連接符(.)來(lái)連接
常見的用途是建立大塊的HTML字串代碼,,賦值號(hào)
(=)
連接符 (.)
可以被簡(jiǎn)寫合并為 (.=)
符號(hào)
2,、在字符串中使用變量
這個(gè)功能讓你無(wú)須使用連接符號(hào)來(lái)粘和大量的簡(jiǎn)單字符串
單引號(hào)串和雙引號(hào)串在PHP中的處理是不相同的。雙引號(hào)串中的內(nèi)容可以被解釋而且替換,,而單引號(hào)串中的內(nèi)容總被認(rèn)為是普通字符,。例如:
$foo = 2;
echo "foo is $foo"; //
打印結(jié)果: foo is 2
echo 'foo is $foo'; //
打印結(jié)果: foo is $foo
echo "foo is $foo\n"; //
打印結(jié)果: foo is 2
(同時(shí)換行)
echo 'foo is $foo\n'; //
打印結(jié)果: foo is
$foo\n
為避免這些字串使用中的潛在問題,我們通常把復(fù)雜的變量從字串中分離開來(lái),,就像這樣:
echo 'value = ' . $a[$i][$j];
還有一種辦法是將復(fù)雜變量用花括號(hào)括起來(lái),,語(yǔ)法分析器就能正確辨認(rèn)了:
echo "value = {$a[$i][$j]}" //打印二維數(shù)組$a的某個(gè)元素
這樣,又出現(xiàn)新問題了,。當(dāng)我們想在字串中引用花括號(hào)字符本身時(shí),,就要記得使用轉(zhuǎn)義符了:
$var = 3;
echo "value = {$var}"; //
打印結(jié)果 "value = 3"
echo "value = \{$var}"; //
打印結(jié)果 "value =
{3}"
3字符串的長(zhǎng)度
長(zhǎng)度
PHP提供strlen函數(shù)來(lái)計(jì)算字符串的長(zhǎng)度:
$str = "test";
echo strlen($str); //
將輸出 4 有點(diǎn)奇怪的是strlen將中日等漢字以及全角字符都當(dāng)作兩個(gè)或四個(gè)長(zhǎng)度計(jì)算,。好在mbstring或icon兩個(gè)函數(shù)可以幫助解決這個(gè)問題,比如:
$len = iconv_strlen($str, "GBK");
$len = mb_strlen($str, "GBK");
注:mbstring模塊提供了大量的對(duì)含有多字節(jié)字符的字符串的處理函數(shù),,推薦多加應(yīng)用
4,、字符串的分隔與連接
PHP允許你把一個(gè)字符串按照一個(gè)分隔符進(jìn)行分隔成一個(gè)數(shù)組,或者將一個(gè)數(shù)組組合成一個(gè)字符串,??聪旅娴睦樱?/span>
$str = "i love iwind";
$array = explode(" ", $str);
上面的explode函數(shù),就把$str字符串按空格字符進(jìn)行分隔,,結(jié)果返回一個(gè)數(shù)組$array:array("i", "love",
"iwind").與explode函數(shù)有類似功能的有:preg_split(), spliti(), split()等函數(shù),。
與此相反的,implode和join則能把一個(gè)數(shù)組結(jié)合成一個(gè)字符串,,他們是具有完全相同功能的函數(shù),。
$array = array("i", "love", "iwind");
$str = implode(" ", $array);
例中的implode函數(shù)將數(shù)組$array的每個(gè)元素用空格字符進(jìn)行連接,返回一個(gè)字符串
$str:
"i love iwind".
5,、字符串的裁剪 一個(gè)字符串首和尾,,可能不是你想要的部分,就可以用
trim去除一個(gè)字符串的兩端空格,
rtrim去除一個(gè)字符串的尾部空格,
ltrim去除一個(gè)字符串的首部空格等函數(shù)
echo trim(" i love iwind "); //
將得到 "i love iwind"
echo rtrim(" i love iwind "); //
將得到 " i love
iwind"
echo ltrim(" i love iwind "); //
將得到 "i love iwind
"
其實(shí)這三個(gè)參數(shù)不僅可以去除字符串首尾的空格,,還可以去除它們的第二個(gè)參數(shù)指定的字符,,如:
echo trim(",1,2,3,4,", ","); //
將得到 1,2,3,4
兩端的","號(hào)被裁掉了。
有時(shí)還會(huì)看到有人使用chop這個(gè)函數(shù),,其實(shí)它是rtrim的同義函數(shù)
6,、字符串大小寫轉(zhuǎn)換 對(duì)于英文字母來(lái)說(shuō),可以用strtoupper,strtolower將其轉(zhuǎn)變成大寫或小寫,。
echo strtoupper("i love iwind"); //
將得到 I LOVE IWIND
echo strtolower("I LOVE IWIND"); //
將得到 i love
iwind
7,、字符串的比較 一般可以用
!=, ==
比較兩個(gè)對(duì)象是否相等,只所以說(shuō)是兩個(gè)對(duì)象,,是因?yàn)樗鼈儾灰欢ㄈ繛樽址?,也可以為整型等等。比?/span>
$a = "joe";
$b = "jerry";
if ($a != $b)
{
echo "不相等";
}
else
{
echo "相等";
}
如果用 !==,===(可以看到多了一個(gè)等號(hào))比較的話,,兩個(gè)對(duì)象的類型要嚴(yán)格相等才能返回true;否則用==,!=則會(huì)將字符串自動(dòng)轉(zhuǎn)換成相應(yīng)的類型,,以便進(jìn)行比較.
22 == "22"; //
返回 true
22 === "22"; //
返回false
正因?yàn)檫@樣,所以我們的程序時(shí)常會(huì)發(fā)生一些想不到的“意外”:
0 == "我愛你"; //
返回true
1 == "1
我愛你";//
返回true
PHP里還有這樣一組用于字符串比較的函數(shù):strcmp,strcasecmp,strncasecmp(),
strncmp(),,它們都是如果前者比后者大,則返回大于0的整數(shù),;如果前者比后者小,則返回小于0的整數(shù),;如果兩者相等,,則返回0.它們比較的原理與
其它語(yǔ)言的規(guī)則都是一樣的。
strcmp是用于區(qū)分大小寫(即大小寫敏感)的字符串比較:
echo strcmp("abcdd", "aBcde"); //
返回 1
(>0),
比較的是 "b"和"B"
strcasecmp用于不區(qū)分大小寫的字符串比較:
echo strcasecmp("abcdd", "aBcde"); //
返回 -1
(<0),
比較的是"d"和"e"
strncmp用于比較字符串的一部分,從字符串的開頭開始比較,,第三個(gè)參數(shù),,為要比較的長(zhǎng)度:
echo strncmp("abcdd", "aBcde", 3); //
返回 1
(>0),
比較了 abc
和 aBc
strncasecmp用于不區(qū)分大小寫的比較字符串的一部分,從字符串的開頭開始比較,,第三個(gè)參數(shù),,為要比較的長(zhǎng)度:
echo strncasecmp("abcdd", "aBcde", 3); //
返回 0,
比較了 abc
和 aBc,
由于不區(qū)分大小寫,所以兩者是相同的,。
還有一種情況是單單比較字符串大小,,達(dá)不到我們預(yù)定的要求,比如照常理
10.gif
會(huì)比 5.gif
大,,但如果應(yīng)用上面幾個(gè)函數(shù),,就會(huì)返回 -1,即表示
10.gif比5.gif,針對(duì)這種情況,PHP提供了兩個(gè)自然對(duì)比的函數(shù)strnatcmp,strnatcasecmp:
echo strnatcmp("10.gif", "5.gif"); //
返回 1
(>0)
echo strnatcasecmp("10.GIF", "5.gif"); //
返回 1
(>0)
8,、字符串的替換 替換的意義在于將一個(gè)字符串的一部分進(jìn)行改變,,使之成為別外一個(gè)新的字符串,以滿足新的要求,。PHP里通常用str_replace("要替換的內(nèi)容", "要取代原內(nèi)容的字符串", "原字符串")進(jìn)行替換,。
echo str_replace("iwind", "kiki", "i love iwind, iwind said");
//
將輸出 "i love kiki, kiki
said"
即將
原字符串中的所有"iwind"都替換成了"kiki".
str_replace是大小寫敏感的,所以對(duì)你不能設(shè)想用
str_replace("Iwind",
"kiki",...)替換原字符串中的"iwind".
str_replace還可以實(shí)現(xiàn)多對(duì)一,,多對(duì)多的替換,,但無(wú)法實(shí)現(xiàn)一對(duì)多的替換:
echo str_replace(array("iwind", "kiki"), "people", "i love kiki,
iwind said");
將會(huì)輸出
i love people, people said 第一個(gè)參數(shù)中的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
。也就是說(shuō)第一個(gè)數(shù)組中的元素被第二個(gè)數(shù)組中的相對(duì)應(yīng)的元素替換掉了,,如果有一個(gè)數(shù)組比另一個(gè)數(shù)組元素?cái)?shù)要少,那么不足的都會(huì)當(dāng)作空來(lái)處理,。
與此有些類似的是strtr,用法請(qǐng)參閱手冊(cè),它們的比較請(qǐng)參閱http://diary./index.php?action=info&id=372
.
此外,,PHP還提供了substr_replace,實(shí)現(xiàn)替換一部分的字符串。語(yǔ)法如下:
substr_replace (原字符串,
要替代的字符串,
開始替換的位置 [,
替換的長(zhǎng)度]) 其中,,開始替換的位置從0開始計(jì)算,,應(yīng)該小于原字符串的長(zhǎng)度。要替換的長(zhǎng)度是可選的,。
echo substr_replace("abcdefgh", "DEF", 3); //
將輸出 "abcDEF"
echo substr_replace("abcdefgh", "DEF", 3, 2); //
將輸出 "abcDEFfgh"
第一個(gè)例子中,,從第三個(gè)位置(即"d")開始替換,從而把
"defgh"都替換成了“DEF” 第二個(gè)例子中,,也是從第三個(gè)位置(即"d")開始替換,,但只能替換2個(gè)長(zhǎng)度,即到e,所以就把"de"替換成了"DEF".
PHP還提供了preg_replace,preg_replace_callback,ereg_replace,eregi_replace等函數(shù)應(yīng)用正則表達(dá)式來(lái)完成字符串替換
9,、字符串的查找與匹配
PHP里用于查找或者匹配或者定位的函數(shù)非常多,,它們都有不同的意義
strstr,stristr.后者與前者的功能,返回值都一樣,,只是不區(qū)分大小寫,。
strstr("母字符串", "子字符串")用來(lái)查找子字符串在母字符串中第一次出現(xiàn)的位置,并返回母字符串中從子字符串開始到母字符串結(jié)束的部分,。比如
echo strstr("abcdefg", "e"); //將輸出
"efg"
如果找不到子字符串,則返回空,。因?yàn)榭梢杂脕?lái)判斷一個(gè)字符串中是否含有另外一個(gè)字符串:
$needle = "iwind";
$str = "i love iwind";
if (strstr($str, $needle))
{
echo "里面有
iwind";
}
else
{
echo "里面沒有
iwind";
}
將會(huì)輸出"里面有
iwind"
HTML相關(guān)
1,htmlspecialchars($string) 這是它的最簡(jiǎn)單用法,,將字符串中的一些特殊字符(顧名思義)&,',"<,>轉(zhuǎn)換成它們對(duì)應(yīng)的HTML實(shí)體形式:
$str = "i love <font
color="red">kiki</font>,
iwind said.";
echo htmlspecialchars($str);
將會(huì)輸出
i love <font
color="red">kiki</font>,
iwind said.
2,htmlentities($string) 將所有能轉(zhuǎn)換成實(shí)體形式的字符都轉(zhuǎn)換成實(shí)體形式。
3,html_entity_decode($string);
PHP4.3.0以后加入的具有與htmlentities($string)相反的功能,。
4,nl2br($string) 將字符串中所有換行符轉(zhuǎn)變成<br /> +
換行符,。如:
$str = "i love kiki,\n iwind said.";
echo nl2br($str);
將會(huì)輸出
i love kiki,<br />
iwind said.
10、字符串的加密 加密字符串最常用的就是md5了,,它將一個(gè)字符串轉(zhuǎn)換成一個(gè)長(zhǎng)32位的唯一的字符串,。
echo md5("i love iwind"); //
將輸出 "2df89f86e194e66dc54b30c7c464c21c"
PHP5給md5加了第二個(gè)參數(shù),從而使它可以輸出16位的加密后的字符串
11,、查找字符位置函數(shù):
strpos($str,search,[int]):查找search在$str中的第一次位置從int開始,;
stripos($str,search,[int]):函數(shù)返回字符串在另一個(gè)字符串中第一次出現(xiàn)的位置。該函數(shù)對(duì)大小寫不敏感
strrpos($str,search,[int]):查找search在$str中的最后一次出現(xiàn)的位置從int
12,、加空格函數(shù)
chunk_split($str,2);向$str字符里面按2個(gè)字符就加入一個(gè)空格
13,、數(shù)據(jù)庫(kù)相關(guān)函數(shù)
addslashes($str):使str內(nèi)單引號(hào)(')、雙引號(hào)("),、反斜線(\)與 NUL
字符串轉(zhuǎn)換為\',",\\,。
magic_quotes_gpc = On 自動(dòng)對(duì) get post cookie的內(nèi)容進(jìn)行轉(zhuǎn)義
get_magic_quotes_gpc()檢測(cè)是否打開magic_quotes_gpc
stripslashes()
去除字符串中的反斜杠
13、快速創(chuàng)建字符串?dāng)?shù)組的函數(shù)range()
比如range()函數(shù)可以快速創(chuàng)建從1到9的數(shù)字?jǐn)?shù)組:
<?php
$numbers=range(1,9);
//用range直接創(chuàng)建1~9共9個(gè)數(shù)字組成的數(shù)組,,以“1”開始“9”結(jié)束,。
echo
$numbers[1];
//輸出創(chuàng)建的第二個(gè)數(shù)組值:2;
echo
$numbers[0];則輸入第一個(gè)值:0,。
?>
當(dāng)然,,使用range(9,1)則創(chuàng)建了9到1的數(shù)字?jǐn)?shù)組。同時(shí),,range()還可以創(chuàng)建從a到z
的字符數(shù)組:
<?php
$numbers=range(a,z);
foreach ($numbers as
$mychrs)
//遍歷$numbers數(shù)組,,每次循環(huán)當(dāng)前單元值被賦給$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是一種遍歷數(shù)組的簡(jiǎn)便方法,foreach
僅能用于數(shù)組,,當(dāng)試圖將其用于其它數(shù)據(jù)類型或者一個(gè)未初始化的變量時(shí)會(huì)產(chǎn)生錯(cuò)誤,,它有兩種格式:
foreach (array_ as
$value)
statementforeach (array_ as $key =>
$value)
statement 第一種格式遍歷給定的 array_ 數(shù)組。每次循環(huán)中,,當(dāng)前單元的值被賦給 $value
并且數(shù)組內(nèi)部的指針向前移一步(因此下一次循環(huán)中將會(huì)得到下一個(gè)單元),。第二種格式做同樣的事,只除了當(dāng)前單元的鍵名也會(huì)在每次循環(huán)中被賦給變量
$key
使用字符數(shù)組時(shí)注意大小寫,,比如range(A,z)和range(a,Z)是不一樣的,。
range()函數(shù)還具有第三個(gè)參數(shù),該參數(shù)的作用是設(shè)定步長(zhǎng),比如range(1,9,3)創(chuàng)建的數(shù)組元素是:1,、4,、7
14、常規(guī)字符串?dāng)?shù)組的排序
一般數(shù)組中的各元素均以字符或數(shù)字表現(xiàn)的,,所以可對(duì)數(shù)組元素進(jìn)行升序排列,,該功能函數(shù)為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." ";
?>
升序排序后的數(shù)組元素顯示為 birth name
nation sex,,當(dāng)然,,sort()函數(shù)是區(qū)分字母大小寫的(字母從大到小的順序是:A…Z…a…z)
Sort()函數(shù)還具有第二參數(shù),用來(lái)說(shuō)明升序的規(guī)則是用來(lái)比較數(shù)字還是字符串的,。比如:
<?php
echo "---按數(shù)字升序排序---<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_NUMERIC和SORT_STRING用來(lái)聲明按數(shù)字或字符的升序排列,。如果按照數(shù)字升序排列是:3,26,;但如果按照字符升序排列則是:26,,3了。
PHP中除了升序函數(shù)以外,,還有降序或稱反向排列的函數(shù),,就是rsort()函數(shù),比如:
$num1=range(1,9);
rsort($num1);
//這里其實(shí)就相當(dāng)于range(9,1)
15,、關(guān)聯(lián)數(shù)組的排序
PHP除了支持?jǐn)?shù)字索引數(shù)組以外,,還支持相關(guān)數(shù)組。比如如下數(shù)組就是一個(gè)相關(guān)(關(guān)聯(lián))數(shù)組:
$peoples=array('xm'=>'name','xb'=>'sex','mz'=>'nation','cs'=>'birth');
使用sort($peoples)默認(rèn)即是按照元素定義值的升序排序,,在關(guān)聯(lián)數(shù)組中可使用asort()函數(shù)表示按元素值升序排序,,關(guān)聯(lián)數(shù)組中最主要的則是可按照關(guān)鍵字(如xm、xb,、mz等)的升序排序,,該方法是用函數(shù)ksort()函數(shù)。
<?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
/>--按關(guān)鍵字升序排列--<br />";
ksort($peoples);
foreach ($peoples as $mychrs)
echo $mychrs." ";
?> 和常規(guī)數(shù)組擁有sort()升序函數(shù)的反向排序rsort()降序函數(shù)相對(duì)應(yīng)的,,關(guān)聯(lián)數(shù)組也有對(duì)應(yīng)的降序函數(shù):asort()函數(shù)和arsort()函數(shù),、ksort()函數(shù)和krsort()函數(shù),。 記憶:原型函數(shù)是sort(),,其中a、k表示關(guān)聯(lián)數(shù)組相關(guān)必須前置,,反向排序使用r修飾,。
16、數(shù)組元素隨機(jī)排序
PHP中使用shuffle()函數(shù)將數(shù)組元素進(jìn)行隨機(jī)的重新排序,,每次都會(huì)顯示不同的排序組合,,比如:
<?php
$fer=array('cnbruce','cnrose','cnjames','cnanne');
shuffle($fer);
//隨即排序,每刷新一次頁(yè)面則進(jìn)行一次隨機(jī)排序。
foreach ($fer as
$mychrs)
echo $mychrs." ";
?>
17,、PHP數(shù)組按原順序反向排序
PHP中可使用array_reverse()函數(shù)將數(shù)組元素按原順序反向排序,。比如:
<?php
$fer=array('cnbruce','cnrose','cnjames','cnanne');
foreach ($fer as $mychrs)
echo $mychrs." ";
$fer=array_reverse($fer);
//將數(shù)組內(nèi)元素按原順序反向排序
echo "<br
/>--按原順序反向--<br />";
foreach ($fer as $mychrs)
echo $mychrs." ";
?>
output: cnbruce cnrose
cnjames cnanne
--按原順序反向--
cnanne cnjames cnrose cnbruce
注意這里的 $fer=array_reverse($fer);
在此之前的任何排序函數(shù)均只是聲明引用,并沒有對(duì)原有數(shù)組進(jìn)行重新定義,,但當(dāng)我調(diào)試該函數(shù)時(shí)則需要重新定義,。這是因?yàn)?span lang="EN-US" xml:lang="EN-US">array_reverse()是返
回原數(shù)組修改后的副本,如果不需要原有數(shù)組,,可對(duì)原數(shù)組重新定義達(dá)到覆蓋的目的,,否則就另外定義數(shù)組保存副本,比 如:$fer_bak=array_reverse($fer_bak);
|