版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
07模塊PHP語(yǔ)言輕松入門
本模塊主要介紹PHP語(yǔ)言的基礎(chǔ)知識(shí),包括PHP語(yǔ)言基礎(chǔ)、變量和常量、數(shù)據(jù)類型、運(yùn)算符、流程控制語(yǔ)句、字符串處理、數(shù)組、日期時(shí)間函數(shù)和函數(shù)等。能力目標(biāo)1.會(huì)編寫簡(jiǎn)單的PHP網(wǎng)頁(yè)2.熟悉預(yù)定義變量和常量的使用3.掌握常用字符串處理函數(shù)的使用4.熟悉數(shù)組的聲明和遍歷5.熟悉PHP內(nèi)置函數(shù)的使用6.會(huì)編寫和調(diào)用簡(jiǎn)單自定義函數(shù)知識(shí)目標(biāo)1.文件格式和標(biāo)記的用法2.變量的命名、可變變量和預(yù)定義變量3.常量的聲明使用和預(yù)定義常量4.整型、浮點(diǎn)型和字符串型等常用數(shù)據(jù)類型5.算術(shù)、賦值、邏輯和比較等常用運(yùn)算符6.if、switch和for循環(huán)等流程控制語(yǔ)句7.trim()、explode()和strcmp()等字符串處理函數(shù)8.?dāng)?shù)組的聲明、遍歷、排序和二維數(shù)組等9.date()、getdate()和strtotime()等日期時(shí)間函數(shù)10.echo()、print()和include()等內(nèi)置函數(shù)以及自定義函數(shù)知識(shí)1PHP語(yǔ)言基礎(chǔ)1.PHP文件格式PHP文件格式非常簡(jiǎn)單,本質(zhì)上而言就是一個(gè)文本文件。其保存成后綴為“.php”的文件。一個(gè)完整的PHP文件由以下元素構(gòu)成:(1)HTML標(biāo)記;(2)PHP標(biāo)記;(3)PHP代碼;(4)注釋;(5)空格。例如,以下為一個(gè)簡(jiǎn)單PHP程序代碼。<Html><head><title>HelloWorld!</title></head><body><?php//輸出Ilikephp. echo"Ilikephp.";?></body></html>在以上代碼中,“<html>”和“<head>”等表示HTML代碼,“<?php……?>”表示php標(biāo)記,“echo"Ilikephp.";”表示PHP代碼,“//輸出Ilikephp.”表示代碼注釋。2.PHP標(biāo)記由于PHP嵌入在HTML中,因此需要標(biāo)記對(duì)來(lái)區(qū)分。通常情況下,可以用下四種區(qū)分方式標(biāo)記PHP代碼。(1)<?php……?>;(2)<?……?>;(3)<scriptlanguage=php>……</script>;(4)<%%>。當(dāng)使用“<?……?>”將PHP代碼嵌入到HTML文件中時(shí),可能會(huì)同XML發(fā)生沖突。為了適應(yīng)XML和其他編輯器,可以在開(kāi)始的問(wèn)號(hào)后面加上“php”使PHP代碼適應(yīng)于XML分析器,如“<?php……?>”;也可以像其他腳本語(yǔ)言那樣使用“<scriptlanguage=php>……</script>”腳本標(biāo)記;還可以使用“<%%>”腳本標(biāo)記,但由于這一腳本標(biāo)記也為ASP語(yǔ)言所采用,所以為了區(qū)別ASP和PHP,盡量少使用該腳本標(biāo)記。推薦使用“<?php……?>”腳本標(biāo)記。3.PHP語(yǔ)法與注釋在書寫PHP代碼時(shí),每句完整代碼后面都要加分號(hào)“;”。而對(duì)于控制語(yǔ)句,一般不需要加分號(hào)“;”,如下面代碼:if(a==b)echo"a和b一樣大";其中“if(a==b)”語(yǔ)句后面不需要跟分號(hào)。如果控制語(yǔ)句下面有多行代碼,則必須使用大括號(hào)“{……}”擴(kuò)起來(lái),如下所示:if(a==b){echo"a與b一樣大";echo"歡迎學(xué)習(xí)php語(yǔ)言";}在PHP的程序中,加入注釋的方法很靈活。在PHP中可以使用“//”(C/C++語(yǔ)言注釋風(fēng)格)或者“#”(UnixShell語(yǔ)言注釋風(fēng)格)來(lái)進(jìn)行單行代碼的注釋,同時(shí)還可以通過(guò)“/*…*/”進(jìn)行大段代碼的注釋。但是不能嵌套使用“/*…*/”注釋符號(hào),否則會(huì)出現(xiàn)編譯錯(cuò)誤。知識(shí)2PHP變量和常量1.變量的命名在PHP中,對(duì)變量名的長(zhǎng)度沒(méi)有任何限制,在變量名中可以使用數(shù)字和字母等字符,但是需要滿足以下約定:(1)PHP變量名是區(qū)分大小寫的,這和C語(yǔ)言是一致的;(2)變量名必須以美元符號(hào)($)開(kāi)始;(3)變量名必須以字母或下劃線"_"開(kāi)頭,不能以數(shù)字字符開(kāi)頭;(4)變量名只能包含字母數(shù)字字符以及下劃線。(5)變量名不能包含空格。如果變量名由多個(gè)單詞組成,那么應(yīng)該使用下劃線進(jìn)行分隔(比如$my_string),或者以大寫字母開(kāi)頭(比如$myString)。比如變量名$my_name和$_age是合法的變量,而變量名$999和$6_age是不合法的。在給變量命名時(shí),最好讓變量名具有一定的含義,能夠代表一定的信息,這樣有利于閱讀源代碼,同時(shí)也有利于對(duì)變量名的引用。2.變量的賦值和很多語(yǔ)言不同,在PHP使用變量前不需要聲明變量,只需給變量賦值即可。變量賦值,是指給變量一個(gè)具體的數(shù)據(jù)值,對(duì)于字符串和數(shù)字類型的變量,可以通過(guò)賦值運(yùn)算符“=”來(lái)實(shí)現(xiàn)。語(yǔ)法格式為:<?php$name=value;?>例如:<?php$myname="James";$yourname="Jackson";?>以上代碼給變量賦值的方式是直接賦值。除此之外,還有兩種給變量賦值的方式,一種是變量間的賦值,變量間的賦值是指賦值后兩個(gè)變量使用各自的內(nèi)存,互不干擾。例如:<?php$myname="James";//給變量$myname直接賦值$yourname=$myname;//使用$myname初始化$yourname$myname="Jeffery";//改變變量$myname的值echo$yourname;//輸出變量$yourname的值?>以上代碼輸出結(jié)果為:James從上面輸出結(jié)果可以看出,改變變量$myname的值后,變量$yourname的值并沒(méi)有跟著變化。另一種是引用賦值,引用的概念是用不同的名字訪問(wèn)同一個(gè)變量?jī)?nèi)容。當(dāng)改變其中的一個(gè)變量的值時(shí),另一個(gè)也跟著發(fā)生變化。使用"&"符號(hào)來(lái)表示引用。例如:<?php$myname="James";//給變量$myname直接賦值//使用引用賦值,此時(shí)$yourname的值為"James“$yourname=&$myname;//改變$myname的值,此時(shí)$yourname的值也變?yōu)?Jeffery"$myname="Jeffery";echo$yourname;//輸出變量$yourname的值?>以上代碼輸出結(jié)果為:Jeffery從上面輸出結(jié)果可以看出,改變變量$myname的值后,變量$yourname的值也跟著發(fā)生了變化。3.可變變量可變變量是一種獨(dú)特的變量,它允許動(dòng)態(tài)改變一個(gè)變量名稱。其工作原理是該變量的名稱由另外一個(gè)變量來(lái)確定,實(shí)現(xiàn)過(guò)程是在變量的前面再多加一個(gè)美元符號(hào)"$"。例如:<?php$change_name="temp"; //聲明變量$change_name$temp="Youcanseeme!";//聲明變量$tempecho$change_name; //輸出變量$change_nameecho" ";echo$$change_name;//通過(guò)可變變量輸出$temp的值?>以上代碼輸出結(jié)果為:temp
Youcanseeme!以上代碼首先定義兩個(gè)變量$change_name和$temp,并且輸出變量$change_name的值,然后使用可變變量來(lái)改變變量$change_name的名稱(變?yōu)?temp),最后輸出改變名稱后的變量值(變量$temp的值)。4.預(yù)定義變量PHP還提供了很多非常實(shí)用的預(yù)定義變量,通過(guò)這些預(yù)定義變量可以獲取到用戶會(huì)話、客戶機(jī)操作系統(tǒng)的環(huán)境和服務(wù)器操作系統(tǒng)的環(huán)境信息。常用的預(yù)定義變量如表7-1所示。5.常量的聲明和使用常量可以理解為值不變的量。常量值被定義后,在腳本的其他任何地方都不能改變。一個(gè)常量由英文字母、下劃線和數(shù)組組成,但數(shù)字不能作為首字母出現(xiàn)。在PHP中使用define()函數(shù)來(lái)定義常量,該函數(shù)的語(yǔ)法為:booldefine(string$constant_name,mixed$value[,bool$case_insensitive=False])獲取常量的值有兩種方法:一種是使用常量名直接獲取值;另一種是使用constant()函數(shù),constant()函數(shù)和直接使用常量名輸出的效果是一樣的,但函數(shù)可以動(dòng)態(tài)地輸出不同的常量,在使用上要靈活方便得多。函數(shù)的語(yǔ)法格式為:Mixedconstant(string$constant_name)參數(shù)constant_name為要獲取常量的名稱,也可為存儲(chǔ)常量的變量。如果成功則返回常量的值,否則提示錯(cuò)誤信息常量沒(méi)有被定義。要判斷一個(gè)變量是否已經(jīng)定義,可以使用defined()函數(shù)。函數(shù)的語(yǔ)法格式為:booldefined(string$constant_name)參數(shù)constant_name為要獲取常量的名稱,成功則返回True,否則返回False。例如:<?phpdefine("PI","3.1415926");echoPI."<BR>"; //輸出常量PIechoPi."<BR>"; //輸出"Pi",表示沒(méi)有該常量define("COUNT","大小寫不敏感的字符串",True);echoCOUNT."<BR>"; //輸出常量COUNTechoCount."<BR>";//輸出,設(shè)定大小寫不敏感$name="count";echoconstant($name)."<BR>";//輸出常量COUNTecho(defined("PI"))."<BR>";//如果定義了常量則返回True,輸出顯示為1?>以上代碼輸出結(jié)果如下圖7-1所示。6.預(yù)定義常量PHP可以使用預(yù)定義常量獲取PHP中的信息。常用的預(yù)定義常量如表7-2所示。注意:“__FILE__”和“__LINE__”中的“__”是兩條下劃線,而不是一條“_”。例如:<?phpecho"當(dāng)前文件路徑:".__FILE__;echo"<br>當(dāng)前行數(shù):".__LINE__;echo"<br>當(dāng)前PHP版本信息:".PHP_VERSION;echo"<br>當(dāng)前操作系統(tǒng):".PHP_OS;?>以上代碼輸出結(jié)果如圖7-2所示。知識(shí)3PHP的數(shù)據(jù)類型PHP是一種類型比較弱的語(yǔ)言,這意味著變量可以包含任意給定的數(shù)據(jù)類型,該類型取決于使用變量的上下文環(huán)境。在PHP中,對(duì)變量的數(shù)據(jù)類型不需要聲明,可以直接為其賦值,如下所示:$number=100;//表示$number為整型$str="IlikePHP";//表示$str為字符串型PHP中的數(shù)據(jù)類型分為兩種,一種是標(biāo)量數(shù)據(jù)類型,這是編程語(yǔ)言中最常見(jiàn)的簡(jiǎn)單數(shù)據(jù)類型;另一種表示復(fù)合數(shù)據(jù)類型,即將多個(gè)簡(jiǎn)單的數(shù)據(jù)類型組合在一起,并將它們存儲(chǔ)在一個(gè)變量名中。標(biāo)量數(shù)據(jù)類型有如下幾種:(1)布爾型(boolean);(2)整型(integer);(3)浮點(diǎn)型(float)(浮點(diǎn)數(shù),也做“double”);(4)字符串(string)。復(fù)合數(shù)據(jù)類型有如下幾種:(1)數(shù)組(array);(2)對(duì)象(object)。另外,PHP中還有兩種特殊的數(shù)據(jù)類型:(1)資源(resource);(2)空值(NULL)。1.布爾型在所有的PHP變量中,布爾型是最簡(jiǎn)單的變量。布爾變量保存一個(gè)True或者False值。其中True或者False是PHP的內(nèi)部關(guān)鍵字。要設(shè)定一個(gè)變量為布爾型時(shí),只需要將True或False賦值給該變量,如下所示:$my_boolean_var=True;True和False實(shí)際上代表數(shù)字1和0,因此True在輸出時(shí)顯示為1,F(xiàn)alse在輸出時(shí)顯示為0。當(dāng)轉(zhuǎn)換布爾型時(shí),以下值被認(rèn)為是False:(1)布爾值False;(2)整型值0(零);(3)浮點(diǎn)型值0.0(零);(4)空白字符串和字符串“0”;(5)沒(méi)有成員變量的數(shù)組;(6)空值NULL。而其他所有值都被認(rèn)為是True。通常布爾值可以用一些表達(dá)式來(lái)返回。如“a>b”、“a=b”等,可以在條件語(yǔ)句中應(yīng)用。2.整型整型數(shù)據(jù)類型只能包含整數(shù)。這些數(shù)據(jù)類型可以是正數(shù)也可以是負(fù)數(shù)??梢栽跀?shù)字前面加上“-”符號(hào)來(lái)表示負(fù)整數(shù)。整型數(shù)的取值范圍是-2147483647到+2147483648。在給一個(gè)整型變量賦值的時(shí)候,可以采用十進(jìn)制、十六進(jìn)制或者八進(jìn)制形式來(lái)指定。十進(jìn)制就是日常使用的數(shù)字;八進(jìn)制,數(shù)字前必須加上“0”;十六進(jìn)制,數(shù)字前必須加“0x”。例如:$int1=100;//一個(gè)十進(jìn)制整數(shù)100$int2=-100;//一個(gè)十進(jìn)制負(fù)數(shù)$int3=0666;//一個(gè)八進(jìn)制整數(shù)$int4=0x64;//一個(gè)十六進(jìn)制整數(shù)3.浮點(diǎn)型浮點(diǎn)數(shù)也稱為雙精度數(shù)或?qū)崝?shù)(PHP中不使用單精度浮點(diǎn)數(shù))。浮點(diǎn)型數(shù)據(jù)類型可以用來(lái)存儲(chǔ)數(shù)字,也可以用來(lái)保存小數(shù)。它提供了比整數(shù)大得多的精度。浮點(diǎn)數(shù)的字長(zhǎng)和平臺(tái)相關(guān),在PHP中,浮點(diǎn)數(shù)可以表示-1.8e308~+1.8e308之間的數(shù)據(jù),并具有14位十進(jìn)制數(shù)字的精度(64位IEEE格式)。浮點(diǎn)數(shù)既可以表示為簡(jiǎn)單的浮點(diǎn)數(shù)常量,例如3.14,也可以寫成科學(xué)計(jì)數(shù)法的形式,尾數(shù)和指數(shù)之間用e或E隔開(kāi),例如314e-2表示314×10的-2次方,注意這種表示形式基數(shù)是10,如果尾數(shù)的小數(shù)點(diǎn)左邊或右邊沒(méi)有數(shù)字則表示這一部分為零,例如3.e-1,.987等等。4.字符串字符串是連續(xù)的字符序列,字符串中的每個(gè)字符只占用一個(gè)字節(jié)。字符串在每種編程語(yǔ)言中都有廣泛的應(yīng)用。在PHP中,定義字符串有以下三種方式。(1)單引號(hào)形式。單引號(hào)字符串的賦值方式如下:$str='我是單引號(hào)中的字符串';如果要將字符串輸出到瀏覽器中,可以使用關(guān)鍵字“echo”或者“print”,如下所示:echo$str;或者print$str;使用單引號(hào)表示字符串的時(shí)候,如果要在字符串中顯示反斜杠和單引號(hào)的時(shí)候,應(yīng)該使用反斜杠來(lái)進(jìn)行轉(zhuǎn)義。即輸出'\''和'\\'字符串時(shí)才能正確顯示單引號(hào)和反斜杠。在用單引號(hào)定義字符串中寫變量名的時(shí)候,PHP不會(huì)將其按照變量進(jìn)行處理。例如會(huì)將'\$var'直接輸出“$var”。(2)雙引號(hào)方式。雙引號(hào)字符串的賦值方式如下:$str="我是雙引號(hào)中的字符串";同理如果要將字符串輸出到瀏覽器中,也可以使用關(guān)鍵字“echo”或者“print”。雙引號(hào)比單引號(hào)支持更多種類的轉(zhuǎn)義字符,例如\n(換行),\t(水平制表符,與TAB鍵相當(dāng)),\"(顯示雙引號(hào)),\\(顯示反斜杠),\$(顯示一個(gè)$符號(hào),否則會(huì)被當(dāng)成變量),\r(回車鍵)。使用雙引號(hào)和單引號(hào)都可以定義字符串,但是絕不是說(shuō)兩者就是等價(jià)的。當(dāng)使用單引號(hào)的時(shí)候,程序不會(huì)首先去判斷該字符串中是否含有變量,而是將全部的內(nèi)容當(dāng)成字符串來(lái)輸出。當(dāng)使用雙引號(hào)的時(shí)候,程序會(huì)首先去判斷字符串中是否含有變量,如果含有變量的話,則直接輸出變量的值。(3)定界符方式定界符采用兩個(gè)相同的標(biāo)識(shí)符來(lái)定義字符串,使用定界符來(lái)定義字符串的時(shí)候要特別注意開(kāi)始和結(jié)束符必須相同,標(biāo)識(shí)符必須符合變量的命名規(guī)則。使用定界符來(lái)定義字符串的時(shí)候要特別注意開(kāi)始標(biāo)識(shí)符前面必須完全有三個(gè)尖括號(hào)<<<,結(jié)束標(biāo)識(shí)符必須在一行的開(kāi)始處,前面不能有任何空格或者任何其他多余的字符,開(kāi)始和結(jié)束標(biāo)識(shí)符后面的任何空格都會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。例如下面代碼使用定界符方式定義了字符串變量$heredoc_str,通過(guò)輸出語(yǔ)句echo$heredoc_str;可以輸出該變量的值。$heredoc_str=<<<heredoc_mark
你好<br>
美元符號(hào)$<br>
反斜杠\<br> "PHP語(yǔ)言"<br> 'ASP語(yǔ)言'heredoc_mark; echo$heredoc_str;注意上面代碼中的定界符“heredoc_mark”可以自己命名,只要符合變量命名規(guī)則即可。以上代碼在瀏覽器中的輸出結(jié)果如圖7-3所示。定界符和雙引號(hào)的使用效果相同,也就是說(shuō)定界符可以直接輸出變量的值,同時(shí)也支持使用各種轉(zhuǎn)義字符。唯一的區(qū)別就是使用定界符定義字符串中的雙引號(hào)不需要使用轉(zhuǎn)義字符就可以實(shí)現(xiàn)。數(shù)據(jù)類型轉(zhuǎn)換是編程語(yǔ)言的常用功能,通常有以下三種方式進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。1.強(qiáng)制類型轉(zhuǎn)換在變量或值前面加上要轉(zhuǎn)換的類型可以進(jìn)行強(qiáng)制轉(zhuǎn)換,PHP支持下列幾種強(qiáng)制類型轉(zhuǎn)換:(array)
數(shù)組(bool)或(boolean)
布爾值(int)或(integer)
整數(shù)(object)
對(duì)象(real)或(double)或(float)
浮點(diǎn)數(shù)(string)
字符串將一個(gè)雙精度數(shù)強(qiáng)制轉(zhuǎn)換成整數(shù)時(shí),將直接忽略小數(shù)部分。$a=(int)14.8;//$a=14將字符串轉(zhuǎn)換成整數(shù)時(shí),取字符串最前端的所有數(shù)字進(jìn)行轉(zhuǎn)換,若沒(méi)有數(shù)字,則為0。$a=(int)"Thereis1tree."http://$a=0$a=(int)"48trees"
//$a=48任何數(shù)據(jù)類型都可以轉(zhuǎn)換成對(duì)象,其結(jié)果是,該變量成為了對(duì)象的一個(gè)屬性。$model="Toyota";$obj=(object)$model;然后可以如下引用這個(gè)值:print$obj->scalar;//返回"Toyota"2.類型自動(dòng)轉(zhuǎn)換當(dāng)字符串和數(shù)值做加法運(yùn)算時(shí),字符串轉(zhuǎn)換成數(shù)值對(duì)應(yīng)的類型。若希望數(shù)值當(dāng)成字符串和原有的字符串進(jìn)行合并操作,可以使用拼接操作符".",例如:$a="Thisis";$b=3;echo$a.$b;//輸出字符串Thisis33.利用類型轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換常用的類型轉(zhuǎn)換函數(shù)有:(1)獲取類型stringgettype(mixed$var)(2)轉(zhuǎn)換類型booleansettype(mixed$var,string$type)函數(shù)將var變量轉(zhuǎn)換成type指定的類型。type可以是下列7個(gè)值之一:array、boolean、float、integer、null、object、string。如果轉(zhuǎn)換成功,返回True;否則為False。例如:$num=12.6;
$flg=settype($num,"int");
var_dump($flg);
//輸出bool(true)
var_dump($num);
//輸出int(12)以上代碼中的var_dump函數(shù)為一個(gè)簡(jiǎn)單的判斷變量類型的函數(shù)。另外還可以使用3個(gè)具體類型的轉(zhuǎn)換函數(shù)intval()、floatval()和strval()進(jìn)行類型的轉(zhuǎn)換,例如:$str="123.9abc";
$int=intval($str);
//轉(zhuǎn)換后數(shù)值123$float=floatval($str);
//轉(zhuǎn)換后數(shù)值123.9
$str=strval($float);
//轉(zhuǎn)換后字符串"123.9"
PHP提供一系列函數(shù)來(lái)識(shí)別變量的值是否是指定的類型,具體如下:is_array()
//是否是數(shù)組is_bool()
//是否是布爾值is_float()
//是否是浮點(diǎn)數(shù)is_integer()
//是否是整數(shù)is_null()
//是否是空is_numeric()
//是否是數(shù)值is_object()
//是否是對(duì)象is_resource()
//是否是資源類型is_scalar()
//是否是標(biāo)量,標(biāo)量變量?jī)H包含integer、float、string或boolean的變量is_string()
//是否是字符串例如:$a=0.3;$b='hellow';$c=True;if(is_numeric($a)) echo'$a是數(shù)值型<br>';else echo'$a不是數(shù)值型<br>';if(is_int($a)) echo'$a是整型<br>';else echo'$a不是整型<br>';if(is_string($b)) echo'$b是字符串型<br>';else echo'$b不是字符串型<br>';if(is_bool($c)) echo'$c是布爾型<br>';else echo'$c不是布爾型<br>';以上代碼在瀏覽器中的輸出結(jié)果圖7-4所示。
知識(shí)4PHP運(yùn)算符運(yùn)算符是一個(gè)特殊符號(hào),它對(duì)一個(gè)值或一組值執(zhí)行一個(gè)指定的操作。PHP具有C、C++和Java語(yǔ)言中常見(jiàn)的運(yùn)算符,這些運(yùn)算符的優(yōu)先權(quán)也是一致的。在PHP中包含以下運(yùn)算符:(1)算術(shù)運(yùn)算符;(2)賦值運(yùn)算符;(3)比較運(yùn)算符;(4)邏輯運(yùn)算符。1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符號(hào)用來(lái)處理四則運(yùn)算,是最簡(jiǎn)單和最常用的符號(hào),尤其是數(shù)字的處理,幾乎都會(huì)使用到算術(shù)運(yùn)算符。自加和自減運(yùn)算符既可以放在變量的前面,也可以放在變量的后面。當(dāng)放在變量的前面時(shí),將會(huì)首先將變量的值加1或者減1,然后返回變量的值;而當(dāng)放在變量的后面時(shí),將會(huì)先返回變量的當(dāng)前值,然后將變量的值加1或者減1。例如:$a=20;echo"a++:".$a++."<br>";//后加echo"變量a的新值:".$a."<br>";$a=20;//重新賦值echo"++a:".++$a."<br>";//先加echo"變量a的新值:".$a."<br>";$a=20;//重新賦值echo"a--:".$a--."<br>";//后減echo"變量a的新值:".$a."<br>";$a=20;//重新賦值echo"--a:".--$a."<br>";//先減echo"變量a的新值:".$a."<br>";以上代碼的運(yùn)行結(jié)果如圖7-5所示。2.比較運(yùn)算符比較運(yùn)算符是PHP中運(yùn)用比較多的運(yùn)算符。常見(jiàn)的比較運(yùn)算符如表7-4所示。3.賦值運(yùn)算符在做簡(jiǎn)單的操作時(shí),賦值運(yùn)算符起到把運(yùn)算結(jié)果值賦給變量的作用。在PHP中,除了基本的賦值運(yùn)算符“=”之外,還提供了若干組合賦值運(yùn)算符。這些賦值運(yùn)算符提供了做基本運(yùn)算和串運(yùn)算的方法。常見(jiàn)的賦值運(yùn)算符如表7-5所示。4.邏輯運(yùn)算符邏輯運(yùn)算符是程序設(shè)計(jì)中不可缺少的一組運(yùn)算符。常見(jiàn)的邏輯運(yùn)算符如表7-6所示。知識(shí)5PHP流程控制語(yǔ)句理論證明,無(wú)論多么復(fù)雜的邏輯結(jié)構(gòu),最終都可以簡(jiǎn)化為三種邏輯的組合。這三種邏輯就是順序邏輯、選擇邏輯和循環(huán)邏輯。所以在面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言中,都有專門的程序語(yǔ)法來(lái)構(gòu)成這三種結(jié)構(gòu)。1.順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)是最簡(jiǎn)單的程序結(jié)構(gòu),就是按照程序書寫的順序逐條語(yǔ)句的執(zhí)行。在此不做贅述。2.選擇結(jié)構(gòu)選擇程序結(jié)構(gòu)用于判斷給定的條件,根據(jù)判斷的結(jié)果判斷某些條件,根據(jù)判斷的結(jié)果來(lái)控制程序的流程。使用選擇結(jié)構(gòu)語(yǔ)句時(shí),要用條件表達(dá)式來(lái)描述條件。在PHP中,經(jīng)常使用的條件語(yǔ)句有:if…else…elseif和switch…case。下面分別對(duì)這兩種條件語(yǔ)句進(jìn)行說(shuō)明。(1)if語(yǔ)句if語(yǔ)句的基本表達(dá)式如下所示:if(條件表達(dá)式)
語(yǔ)句;在上面基本if結(jié)構(gòu)中,如果條件表達(dá)式的值為True就執(zhí)行語(yǔ)句,否則不執(zhí)行語(yǔ)句。例如:if($a>$b)echo"a大于b";如果按條件執(zhí)行的語(yǔ)句不止一條,則需要將這些語(yǔ)句放入語(yǔ)句組中,通過(guò)大括號(hào)對(duì)“{”和“}”括起來(lái)。例如;if($a>$b){echo"a大于b";$b=$a;}經(jīng)常需要在滿足某個(gè)條件時(shí)執(zhí)行一條語(yǔ)句,而不滿足該條件時(shí)執(zhí)行其他語(yǔ)句,這正是else的功能。else延伸了if語(yǔ)句,可以在if語(yǔ)句中的表達(dá)式的值為False時(shí)執(zhí)行語(yǔ)句。例如:if($a>$b){echo"a大于b";}else{echo"a小于b";}如果需要同時(shí)判斷多個(gè)條件,則上面的if...else語(yǔ)句滿足不了需求,PHP提供了elseif來(lái)擴(kuò)展需求。elseif通常在if和else語(yǔ)句之間。例如:<?phpif($a>$b){echo"a大于b";}elseif($a==$b){echo"a等于b";}else{echo"a小于b";}?>下面是一個(gè)完整的if語(yǔ)句的應(yīng)用實(shí)例,根據(jù)學(xué)生的考試成績(jī)輸出不同的結(jié)果。代碼如下所示:<?php$chengji=91;if($chengji<60)echo"你不及格";elseif($chengji>=60&&$chengji<70)echo"你剛剛及格了";elseif($chengji>=70&&$chengji<80)echo"你得了良好";elseif($chengji>=80&&$chengji<90)echo"你很優(yōu)秀哦!";elseecho"你簡(jiǎn)直太棒了!"?>以上代碼執(zhí)行結(jié)果如圖7-6所示。(2)switch語(yǔ)句switch語(yǔ)句和具有同樣表達(dá)式的一系列的if語(yǔ)句相似。很多場(chǎng)合下需要把同一個(gè)變量(或表達(dá)式)與很多不同的值比較,并根據(jù)它等于哪個(gè)值來(lái)執(zhí)行不同的代碼。這正是switch語(yǔ)句的用途。switch語(yǔ)句的語(yǔ)法如下:switch(表達(dá)式)
{case表達(dá)式1:語(yǔ)句1;Break;case表達(dá)式2:語(yǔ)句2;Break;……case表達(dá)式n:語(yǔ)句n;
default:語(yǔ)句n+1;Break;}switch語(yǔ)句執(zhí)行時(shí),先求解表達(dá)式的值,然后將其值與其后的多個(gè)case后面的表達(dá)式的值逐個(gè)進(jìn)行比對(duì),如果和第m個(gè)相等,則執(zhí)行語(yǔ)句m、語(yǔ)句m+1,……,直到語(yǔ)句n+1為至或碰到break語(yǔ)句。通常在設(shè)計(jì)switch語(yǔ)句塊時(shí),需要在每個(gè)case語(yǔ)句段的最后寫上break;語(yǔ)句。一個(gè)case的特例是default。它匹配了任何其他case都不匹配的情況,并且應(yīng)該是最后一條case語(yǔ)句。<?phpswitch(date("D")){case"Mon":echo"今天星期一";break;case"Tue":echo"今天星期二";break;case"Wed":echo"今天星期三";break;case"Thu":echo"今天星期四";break;case"Fri":echo"今天星期五";break;default:echo"今天放假";break;}?>以上代碼執(zhí)行結(jié)果如圖7-7所示。3.循環(huán)結(jié)構(gòu)循環(huán)語(yǔ)句用于反復(fù)執(zhí)行一系列的語(yǔ)句,直到條件表達(dá)式保持真值。為了保證循環(huán)的正確執(zhí)行,條件表達(dá)式中計(jì)算的值應(yīng)該在每次執(zhí)行循環(huán)語(yǔ)句的時(shí)候進(jìn)行修改。下面分別介紹兩種最常用的循環(huán)語(yǔ)句。(1)for循環(huán)for循環(huán)的語(yǔ)法如下:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
循環(huán)體語(yǔ)句;如果循環(huán)體語(yǔ)句有多條時(shí),要用大括號(hào)括起來(lái)。在for循環(huán)中,先執(zhí)行一次表達(dá)式1。然后判斷表達(dá)式2的值是否為真,如果為真,則執(zhí)行循環(huán)體,再執(zhí)行表達(dá)式3。表達(dá)式3執(zhí)行完又返回判斷表達(dá)式2的值,只到表達(dá)2的值為假就結(jié)束循環(huán)。<?php$sum=1;for($i=1;$i<=10;$i++){ $sum*=$i;}echo"10!=".$sum;?>以上代碼作用是計(jì)算10的階乘,運(yùn)行結(jié)果如圖7-8所示。(2)while循環(huán)while循環(huán)是PHP中最簡(jiǎn)單的循環(huán)類型。while循環(huán)的語(yǔ)法為:while(表達(dá)式)
循環(huán)體語(yǔ)句;如果循環(huán)體語(yǔ)句有多條時(shí),要用大括號(hào)括起來(lái)。其執(zhí)行流程是先判斷表達(dá)式的值,如果為真(True)則執(zhí)行循環(huán)體語(yǔ)句,執(zhí)行完后程序流程繼續(xù)開(kāi)始判斷表達(dá)式的值。如果為真繼續(xù)執(zhí)行循環(huán)體語(yǔ)句。如此循環(huán)執(zhí)行,真到表達(dá)式的值為假(False)為至。有時(shí)候如果while表達(dá)式的值一開(kāi)始就是False,則循環(huán)語(yǔ)句一次都不會(huì)執(zhí)行。<?php$i=1;$str="20以內(nèi)的偶數(shù)為:";while($i<=20){if($i%2==0){ $str.=$i."";}$i++;}echo$str;?>以上代碼執(zhí)行結(jié)果如圖7-9所示。
while循環(huán)的另外一種使用方式是do…while。do…while語(yǔ)句的語(yǔ)法為:do循環(huán)體語(yǔ)句;while(表達(dá)式)如果循環(huán)體語(yǔ)句有多條時(shí),要用大括號(hào)括起來(lái)。do…while語(yǔ)句的流程是先執(zhí)行一循環(huán)體語(yǔ)句,后判斷表達(dá)式的值。如果表達(dá)的值第一次就為False,do…while循環(huán)也會(huì)至少執(zhí)行一次循環(huán)體語(yǔ)句。這是do…while循環(huán)與while循環(huán)的主要區(qū)別。(3)foreachforeach循環(huán)是php4中引入的,只能用于數(shù)組。在php5中,又增加了對(duì)對(duì)象的支持。foreach()有兩種用法:foreach(array_nameas$value)
{
語(yǔ)句塊;
}這里的array_name是你要遍歷的數(shù)組名,每次循環(huán)中,array_name數(shù)組的當(dāng)前元素的值被賦給$value,并且數(shù)組內(nèi)部的下標(biāo)向下移一步,也就是下次循環(huán)會(huì)得到下一個(gè)元素。foreach(array_nameas$key=>$value)
{
語(yǔ)句塊;
}
這里跟第一種方法的區(qū)別就是多了個(gè)$key,也就是除了把當(dāng)前元素的值賦給$value外,當(dāng)前元素的鍵值也會(huì)在每次循環(huán)中被賦給變量$key。鍵值可以是下標(biāo)值,也可以是字符串。比如book[0]=1中的“0”,book[id]="001"中的“id”。<?php$book=array("1"=>"聯(lián)想筆記本","2"=>"數(shù)碼相機(jī)","3"=>"天翼3G手機(jī)","4"=>"瑞士手表");$price=array("1"=>"4998元","2"=>"2588元","3"=>"2766元","4"=>"76698元");$counts=array("1"=>2,"2"=>1,"3"=>2,"4"=>2);echo'<tablewidth="580"border="1"><tr><tdwidth="145"align="center">商品名稱</td><tdwidth="145"align="center">價(jià)格</td><tdwidth="145"align="center">數(shù)量</td><tdwidth="145"align="center">金額</td></tr>';foreach($bookas$key=>$value){//以book數(shù)組做循環(huán),輸出鍵和值
echo'<tr><tdheight="25"align="center">'.$value.'</td><tdalign="center">'.$price[$key].'</td><tdalign="center">'.$counts[$key].'</td><tdalign="center">'.$counts[$key]*$price[$key].'</td></tr>';}echo'</table>';?>以上代碼的執(zhí)行結(jié)果如圖7-10所示。PHP常用循環(huán)中,經(jīng)常會(huì)遇到需要中止循環(huán)的情況。而處理方式主要用到break及continue兩個(gè)流程控制指令。通過(guò)這兩個(gè)語(yǔ)句可以增強(qiáng)編程的靈活性,提高編程效率,下面分別介紹這兩個(gè)語(yǔ)句。1.break語(yǔ)句結(jié)束當(dāng)前for、foreach、while、do-while、switch結(jié)構(gòu)的執(zhí)行。break可以接受一個(gè)可選的數(shù)字參數(shù)來(lái)決定跳出幾重循環(huán)。例如:<?php$num=0;while(++$num){switch($num){case5:echo"At5<br/>\n";break1;//只跳出switch循環(huán),1為參數(shù).case10:echo"At10;quitting<br/>\n";break2;//跳出while和switch循環(huán),2為參數(shù).default:break;}}?>以上代碼輸執(zhí)行結(jié)果如圖7-11所示。
2.continue循環(huán)continue用來(lái)跳過(guò)本次循環(huán)中剩余的代碼,并在條件求值為真時(shí)開(kāi)始執(zhí)行下一次循環(huán)。continue還可接受一個(gè)可選的數(shù)字參數(shù)來(lái)決定跳過(guò)幾重循環(huán)到循環(huán)結(jié)尾。例如:<?php
$i=0;while($i++<5){if($i==2)//跳了,也就是不會(huì)輸出iam2;{continue;}echo"iam$i<br>";}$i=0;while($i++<5){echo"外層<br>\n";while(1){echo" 中間層<br>\n";while(1){echo" 內(nèi)層<br>\n";$i=6;continue3;}//因?yàn)槊看蔚絻?nèi)層的時(shí)候,就跳到第一層,不會(huì)被執(zhí)行
echo"我永遠(yuǎn)不會(huì)被輸出的.<br>\n";}echo"我也是不會(huì)被輸出的.<br>\n";}?>以上代碼的執(zhí)行結(jié)果如圖7-12所示。知識(shí)6PHP字符串處理在PHP編程中,字符串總是會(huì)被大量的生成和處理。正確地使用和處理字符串就顯得越來(lái)越重要了,下面就按照功能介紹常用字符串處理函數(shù)。1.獲取字符串長(zhǎng)度獲取字符串長(zhǎng)度可通過(guò)strlen函數(shù)實(shí)現(xiàn),語(yǔ)法格式如下:intstrlen(string$str)參數(shù)str為需要計(jì)算長(zhǎng)度的字符串,成功則返回字符串str的長(zhǎng)度;如果str為空,則返回0。例如:<?php$str
=
'abcdef';echo
strlen($str);
//字符串長(zhǎng)度為6$str
=
'
ab
cd
';echo
strlen($str);
//因?yàn)橛?個(gè)空格,所以字符串的長(zhǎng)度為7?>2.去除字符串多余空格用戶在輸入數(shù)據(jù)的時(shí)候,經(jīng)常會(huì)無(wú)意中輸入空格。而在有些情況下字符串中不允許出現(xiàn)空格。這個(gè)時(shí)候就需要去除字符串中的空格,在PHP中提供了以下函數(shù)去除字符串中的空格。(1)trim()函數(shù)trim()函數(shù)用于去除字符串開(kāi)始位置以及結(jié)束位置的空格,并返回去掉空格后的字符串。語(yǔ)法格式如下:stringtrim(string$str[,string$charlist])此函數(shù)返回字符串$str去除首尾空白字符后的結(jié)果。如果不指定第二個(gè)參數(shù),trim()函數(shù)默認(rèn)將去除的字符如下:""(ASCII為32(0x20)),普通空格符。"\t"(ASCII為9(0x09)),制表符。"\n"(ASCII為10(0x0A)),換行符。"\r"(ASCII為13(0x0D)),回車符。"\0"(ASCII為0(0x00)),空字節(jié)符。"\x0B"(ASCII為11(0x0B)),垂直制表符。(2)ltrim()函數(shù)ltrim()函數(shù)用于去除字符串左邊的空格或者指定字符串。其默認(rèn)去除的字符串同trim()函數(shù)一樣。該函數(shù)的語(yǔ)法格式如下:stringltrim(string$str[,string$charlist])(3)rtrim()函數(shù)rtrim()函數(shù)用于去除字符串右邊的空格或者指定字符串。用法同trim()和ltrim()函數(shù)一樣。該函數(shù)的語(yǔ)法格式如下:stringrtrim(string$str[,string$charlist])3.字符串的聯(lián)接和分割很多時(shí)候,需要將一個(gè)包含很多信息的字符串分離開(kāi)來(lái),比如一個(gè)字符串中包含有聯(lián)系人的姓名、性別、年齡以及個(gè)人愛(ài)好等。在PHP中提供了若干個(gè)進(jìn)行字符串聯(lián)接和分割的函數(shù)。(1)explode()函數(shù)該函數(shù)的功能是按照指定的分隔符將一個(gè)字符串分開(kāi)。該函數(shù)的語(yǔ)法格式如下:arrayexplode(string$separator,string$str[,int$limit])explode函數(shù)一共有3個(gè)參數(shù),其中第一個(gè)參數(shù)separator表示分割符號(hào),也就是按照什么原則來(lái)進(jìn)行分割,如果分割符被設(shè)置為空,則函數(shù)返回False,如果要被分割的字符串中不包含分隔符,則返回整個(gè)原始字符串;第二個(gè)參數(shù)str表示要被分割的字符串;第三個(gè)參數(shù)limit用來(lái)限制被分割后的字符串片斷的數(shù)量。被分割后的字符串存儲(chǔ)在一個(gè)數(shù)組中。例如:<?phpecho"通過(guò)空格分隔字符串:<br>";$str="a1a2a3a4a5a6";//通過(guò)空格分隔$str_array=explode("",$str);//輸出返回?cái)?shù)組的頭兩個(gè)元素echo$str_array[0]."<BR>";//輸出a1echo$str_array[1]."<BR>";//輸出a2//將分隔后的元素保存到list的變量中echo"將變量保存在list變量中:<br>";$data="myname:*:512:1000";list($user,$pass,$uid,$gid)=explode(":",$data);echo$user."<BR>";//輸出mynameecho$pass."<BR>";//輸出*echo"限制分隔的字符串?dāng)?shù):<BR>";$limit="a;b;c;d;e;f;";$back_array=explode(";",$limit,3);print_r($back_array);?>以上代碼的執(zhí)行結(jié)果如圖7-13所示。(2)implode()函數(shù)該函數(shù)作用剛好和explode函數(shù)的作用相反,將一些字符串通過(guò)指定的分割符連成一個(gè)字符串。該函數(shù)的語(yǔ)法格式如下:stringimplode(string$separator,array$str_array)該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)separator表示連接字符串的連接符號(hào),第二個(gè)參數(shù)str_array表示需要連接成字符串的數(shù)組。例如:<?php$myarray=array('firstname','email','phone');//用逗號(hào)分隔符連接數(shù)組$comma_separated=implode(",",$myarray);echo$comma_separated;?>以上代碼輸出結(jié)果如下:firstname,email,phone(3)substr()函數(shù)該函數(shù)允許訪問(wèn)指定的一個(gè)字符串的起始位置和結(jié)束位置的子字符串。該函數(shù)的語(yǔ)法格式如下:stringsubstr(string$str,int$start[,int$length])該函數(shù)有3個(gè)參數(shù),其中參數(shù)str是原始字符串,參數(shù)start是子字符串的起始位置,參數(shù)length為子字符串的長(zhǎng)度。該函數(shù)返回需要獲取的子字符串。如果省略了參數(shù)start,則默認(rèn)從0開(kāi)始,即從字符串的第一個(gè)字符開(kāi)始,如果省略了參數(shù)length,則默認(rèn)獲取從起始位置之后的所有字符。例如:<?php$rest=substr("abcdef",1);//返回"bcdef"$rest=substr("abcdef",0,4);//返回"abcd"http://字符串也可以直接通過(guò)索引直接訪問(wèn)其字符$string='abcdef';echo$string{0};//返回aecho$string{3};//返回d//使用負(fù)數(shù)作為起始位置$rest=substr("abcdef",-1);//返回"f"$rest=substr("abcdef",-3,1);//返回"d"?>4.字符串比較函數(shù)直接比較字符串是否完全一致,可以使用“==”來(lái)進(jìn)行,但是有時(shí)候可能需要進(jìn)行更加復(fù)雜的字符串比較,如部分匹配等。在PHP中提供了若干個(gè)進(jìn)行字符比較的函數(shù)。(1)strcmp()函數(shù)該函數(shù)進(jìn)行字符串之間的比較。該函數(shù)的語(yǔ)法格式如下:intstrcmp(string$str1,string$str2)該函數(shù)對(duì)傳入的兩個(gè)字符串參數(shù)進(jìn)行比較,如果兩個(gè)字符串完全相同,則返回0;如果按照字典順序str1在str2后面,則返回一個(gè)正數(shù);如果str1在str2前面,則返回一個(gè)負(fù)數(shù)。例如:<?php$a="iliketofly";$b="iliketoclimb";$back=strcmp($a,$b);if($back>0) echo'$a大于$b';elseif($back<0) echo'$a小于$b';else echo'$a等于$b';?>以上代碼輸出結(jié)果為:$a大于$b(2)strcasecmp()函數(shù)該函數(shù)同strcmp函數(shù)基本一致,但是該函數(shù)在比較的時(shí)候不區(qū)分大小寫,而strcmp在比較的時(shí)候是區(qū)分大小寫的。該函數(shù)的語(yǔ)法格式如下:intstrcasecmp(string$str1,string$str2)(3)strnatcmp()函數(shù)該函數(shù)同strcmp函數(shù)基本一致,但是比較的原則有所不同。該函數(shù)并不是按照字典順序排列,而是按照“自然排序”比較字符串。所謂“自然排序”就是按照人們的習(xí)慣來(lái)進(jìn)行排序。例如用strcmp函數(shù)來(lái)進(jìn)行排序,“3”會(huì)大于“13”,而在實(shí)際中,數(shù)字“13”要大于“3”,因此strnatcmp函數(shù)是按照后者來(lái)進(jìn)行比較的。該函數(shù)的語(yǔ)法格式如下:intstrnatcmp(string$str1,string$str2)例如:<?php$arr1=$arr2=array("img12.png","img10.png","img2.png","img1.png");echo"正常比較:<br>";//usort函數(shù)表示按照指定的函數(shù)進(jìn)行排序//此處表示用strcmp函數(shù)對(duì)數(shù)組元素進(jìn)行排序usort($arr1,"strcmp");print_r($arr1);echo"<br>按照自然數(shù)比較<br>";//使用strnatcmp函數(shù)對(duì)數(shù)組進(jìn)行排序usort($arr2,"strnatcmp");print_r($arr2);?>以上代碼的執(zhí)行結(jié)果如圖7-14所示。(4)strnatcasecmp()函數(shù)該函數(shù)用法同strnatcmp()函數(shù),只是該函數(shù)不區(qū)分大小寫。該函數(shù)的語(yǔ)法格式如下:intstrnatcasecmp(string$str1,string$str2)5.字符串的查找和替換在PHP編程中經(jīng)常要進(jìn)行字符串的查找和替換等操作,在PHP中提供了若干個(gè)進(jìn)行字符查找和替換的函數(shù)。(1)strstr()函數(shù)該函數(shù)用于在一個(gè)字符串中查找匹配的字符串或者字符。該函數(shù)的語(yǔ)法格式如下:stringstrstr(string$str,string$search_str)其中第一個(gè)參數(shù)str表示原始字符串,第二個(gè)參數(shù)search_str表示要被查詢的關(guān)鍵字,即子字符串或者字符。如果找到了search_str的一個(gè)匹配,則該函數(shù)返回從search_str開(kāi)始到整個(gè)字符串結(jié)束的子字符串,如果沒(méi)有匹配,則返回False。如果存在不止一個(gè)匹配,則返回從第一個(gè)匹配位置之后的所有子字符串。例如:<?php$email='zhangsan@';$domain=strstr($email,'@');echo$domain;?>以上代碼輸出結(jié)果如下:@注意:strstr函數(shù)還有另外一個(gè)別名函數(shù)即strchr函數(shù),這兩個(gè)函數(shù)用法和含義一樣。(2)stristr()函數(shù)該函數(shù)的用法同strstr函數(shù)基本一致,只是該函數(shù)是不區(qū)分大小寫的。該函數(shù)的語(yǔ)法格式同strstr()函數(shù)。(3)strrchr()函數(shù)該函數(shù)的用法同strstr函數(shù)基本一致,只是從最后一個(gè)被搜索的字符串開(kāi)始返回。該函數(shù)的語(yǔ)法格式同strstr()函數(shù)。(4)strpos()函數(shù)該函數(shù)在原始字符串中查找目標(biāo)子字符串第一次出現(xiàn)的位置。該函數(shù)的語(yǔ)法格式如下:intstrpos(string$str,string$search_str[,int$offset])該函數(shù)返回第一次出現(xiàn)參數(shù)search_str的位置。如果沒(méi)有找到字符串search_str,則返回False。其中參數(shù)offset表示從原始字符串str的第offset個(gè)字符開(kāi)始搜索。例如:<?php$mystring='abcde';$searchme='a';$pos=strpos($mystring,$searchme);/*注意判斷返回值,因?yàn)槿绻檎业綖榈?個(gè)字符,其位置索引為0,和False的值是一樣的,因此在比較變量$pos和False時(shí)要使用===(恒等)比較,既要比較變量的值也要比較變量的類型。*/if($pos===False){echo"沒(méi)有找到字符串$searchme";}else{echo"找到子字符串$searchme";echo"其位置為$pos<br>";}//設(shè)定起始搜索位置$newstring='abcdefabcdef';$pos=strpos($newstring,'b',2);//$pos=8echo"設(shè)定初始查詢位置為2后,查找字符b所處位置:";echo$pos;?>以上代碼輸出結(jié)果為:找到子字符串a(chǎn)其位置為0
設(shè)定初始查詢位置為2后,查找字符b所處位置:8(5)strrpos()函數(shù)該函數(shù)同strpos函數(shù)用法基本一致。只是返回最后一次出現(xiàn)被查詢字符串的位置。該函數(shù)的語(yǔ)法格式同strpos()函數(shù)。(6)str_replace()函數(shù)該函數(shù)將用新的子字符串替換原始字符串中被指定要替換的字符串。該函數(shù)的語(yǔ)法格式如下:mixedstr_replace(mixed$search,mixed$replace,mixed$subject[,int$count])函數(shù)的參數(shù)search表示要被替換的目標(biāo)字符串,參數(shù)replace表示替換后的新字符串,參數(shù)subject表示原始字符串。參數(shù)count表示被替換的次數(shù)。知識(shí)7PHP數(shù)組數(shù)組就是一組數(shù)據(jù)的集合,把一系列數(shù)據(jù)組織起來(lái),形成一個(gè)可操作的整體。PHP中的數(shù)組較為復(fù)雜,但比其他許多高級(jí)語(yǔ)言的數(shù)組更靈活。數(shù)組array是一組有序的變量,其中每個(gè)變量被稱為一個(gè)元素。每個(gè)元素由一個(gè)特殊的標(biāo)識(shí)符來(lái)區(qū)分,這個(gè)標(biāo)識(shí)符稱為鍵(也稱為下標(biāo))。數(shù)組中的每個(gè)實(shí)體都包含兩項(xiàng):鍵和值??梢酝ㄟ^(guò)鍵值來(lái)獲取相應(yīng)數(shù)組元素,這些鍵可以是數(shù)值鍵或關(guān)聯(lián)鍵。如果說(shuō)變量是存儲(chǔ)單個(gè)值的容器,那么數(shù)組就是存儲(chǔ)多個(gè)值的容器。1.?dāng)?shù)組的初始化在PHP中初始化數(shù)組的方式主要有兩種:一種是直接通過(guò)給數(shù)組元素賦值的方式初始化數(shù)組。另一種是應(yīng)用array()函數(shù)初始化數(shù)組。直接通過(guò)給數(shù)組元素賦值是一種比較靈活的初始化數(shù)組的方式,如果在創(chuàng)建數(shù)組時(shí)不知道所創(chuàng)建數(shù)組的大小,或在實(shí)際編寫程序時(shí)數(shù)組的大小可能發(fā)生改變,采用這種數(shù)組創(chuàng)建的方法比較好。例如:<?php$student[0]="Adam";$student[1]="James";$student[2]="Simon";$student[3]="Tommy";print_r($student);?>輸出結(jié)果為:Array([0]=>Adam[1]=>James[2]=>Simon[3]=>Tommy)使用array()函數(shù)可以同時(shí)為一個(gè)數(shù)組分配多個(gè)值,這種方式初始化數(shù)組比直接給數(shù)組元素賦值更加高效??梢允褂胊rray()函數(shù)按照下面的方式來(lái)定義數(shù)組$student。$student=array("Adam","James","Simon","Tommy");在正常情況下,操作數(shù)組使用默認(rèn)下標(biāo)。這意味著數(shù)組的索引正常情況下從0開(kāi)始,但是,也可以使用"=>"運(yùn)算符重載默認(rèn)下標(biāo)。在上面的例子中,$student數(shù)組中有4個(gè)元素,其下標(biāo)分別是0,1,2,3。可以指定下標(biāo)從1開(kāi)始,要實(shí)現(xiàn)這一點(diǎn),可以改寫$student數(shù)組如下:$student=array(1=>"Adam","James","Simon","Tommy");如果此時(shí)輸出$student數(shù)組,輸出結(jié)果為:Array([1]=>Adam[2]=>James[3]=>Simon[4]=>Tommy)以上數(shù)組訪問(wèn)時(shí)是通過(guò)其數(shù)字索引,這種數(shù)組被稱為數(shù)字索引數(shù)組。而PHP還支持關(guān)聯(lián)數(shù)組,在關(guān)聯(lián)數(shù)組中,可以將每個(gè)變量值與任何關(guān)鍵字或索引關(guān)聯(lián)起來(lái)。例如:<?php$student=array("Adam"=>22,"James"=>23,"Simon"=>24,"Tommy"=>25);print_r($student);?>輸出結(jié)果為:Array([Adam]=>22[James]=>23[Simon]=>24[Tommy]=>25)關(guān)聯(lián)數(shù)組也支持?jǐn)?shù)字索引,但只要索引中有一個(gè)不是數(shù)字,那么這個(gè)數(shù)組就是關(guān)聯(lián)數(shù)組。例如$student數(shù)組也可以定義為:$student=array("Adam"=>22,23=>"James",24=>"Simon","Tommy"=>25);雖然上面數(shù)組中帶有數(shù)字索引(如23和24),但該數(shù)組還是關(guān)聯(lián)數(shù)組。2.?dāng)?shù)組的輸出和遍歷在PHP中對(duì)數(shù)組元素進(jìn)行輸出,可以通過(guò)輸出語(yǔ)句來(lái)實(shí)現(xiàn),如echo語(yǔ)句、print語(yǔ)句等,但使用這種輸出方式只能對(duì)數(shù)組中某一元素進(jìn)行輸出。而通過(guò)print_r()函數(shù)可以將數(shù)組結(jié)構(gòu)進(jìn)行輸出。print_r()函數(shù)的語(yǔ)法格式如下:boolprint_r(mixed$expression)如果該函數(shù)的參數(shù)expression為普通的整型、字符串和實(shí)型變量,則輸出該變量本身。如果該參數(shù)為數(shù)組,則按照一定鍵值和元素的順序顯示出該數(shù)組中的所有元素。<?php$student=array("Adam"=>22,23=>"James",24=>"Simon","Tommy"=>25);print_r($student);?>輸出結(jié)果為:Array([Adam]=>22[23]=>James[24]=>Simon[Tommy]=>25)遍歷數(shù)組中的元素是常用的一種操作,在PHP中遍歷數(shù)組的方法有多種,下面介紹最常用的兩種方法。(1)使用foreach()結(jié)構(gòu)遍歷數(shù)組foreach()是一個(gè)用來(lái)遍歷數(shù)組中數(shù)據(jù)的最簡(jiǎn)單有效的方法。例如:<?php$student=array("Adam"=>22,"James"=>23,"Simon"=>24,"Tommy"=>25);foreach($studentas$value){//以$student數(shù)組做循環(huán),輸出每個(gè)數(shù)組元素的值
echo$value."<br>";}?>輸出結(jié)果如圖7-15所示。使用foreach()結(jié)構(gòu)遍歷數(shù)組時(shí)可以同時(shí)將數(shù)組的鍵值(數(shù)字和字符索引)和數(shù)組元素值輸出。例如將上面代碼改寫為如下代碼:<?php$student=array("Adam"=>22,"James"=>23,"Simon"=>24,"Tommy"=>25);foreach($studentas$key=>$value){//以student數(shù)組做循環(huán),輸出鍵和值
echo$key."的年齡為".$value."<br>";}?>輸出結(jié)果如圖7-16所示。(2)使用list()和each()函數(shù)遍歷數(shù)組list()和each()函數(shù)通常配合while循環(huán)來(lái)遍歷數(shù)組,而且list()僅能用于數(shù)字索引的數(shù)組,且數(shù)字索引從0開(kāi)始。例如:<?php$student=array("Adam"=>22,"James"=>23,"Simon"=>24,"Tommy"=>25);while(list($key,$val)=each($student)){echo$key."的年齡為".$val."<br>";}?>3.?dāng)?shù)組的應(yīng)用數(shù)組作為PHP中的一種重要的數(shù)據(jù)結(jié)構(gòu),與其相關(guān)的應(yīng)用還有很多,下面主要按功能介紹數(shù)組的常用應(yīng)用。(1)統(tǒng)計(jì)數(shù)組元素個(gè)數(shù)在PHP中,使用count()函數(shù)對(duì)數(shù)組中的元素個(gè)數(shù)進(jìn)行統(tǒng)計(jì)。語(yǔ)法格式如下:intcount(mixed$array[,int$mode])其中array代表要統(tǒng)計(jì)的數(shù)組。mode為可選參數(shù),當(dāng)該值取COUNT_RECURSIVE(或1),函數(shù)將遞歸地對(duì)數(shù)組計(jì)數(shù),這對(duì)統(tǒng)計(jì)多維數(shù)組非常有用。mode的默認(rèn)值為0,此時(shí)只能統(tǒng)計(jì)一維數(shù)組。(2)數(shù)組的排序在PHP中,提供了一些函數(shù),可以很方便地對(duì)數(shù)組進(jìn)行排序。sort()函數(shù)對(duì)數(shù)組進(jìn)行排序,語(yǔ)法格式如下:boolsort(array$array[,int$sort_flags])參數(shù)array代表要排序的數(shù)組,可選參數(shù)sort_flags可以用以下值改變排序的行為。SORT_REGULAR:正常比較單元(不改變類型)SORT_NUMERIC:元素被作為數(shù)字來(lái)比較SORT_STRING:元素被作為字符串來(lái)比較SORT_LOCALE_STRING:根據(jù)當(dāng)前的區(qū)域(locale)設(shè)置來(lái)把元素當(dāng)作字符串比較。sort()函數(shù)將數(shù)組元素從最低到最高重新排序。同時(shí)刪除數(shù)組元素原有的鍵名并給排序后數(shù)組元素賦與新的鍵名。而不是僅僅將原有鍵名重新排序。asort()函數(shù)對(duì)數(shù)組進(jìn)行排序,保持?jǐn)?shù)組索引和單元的關(guān)聯(lián)。主要用于對(duì)那些單元順序很重要的結(jié)合數(shù)組進(jìn)行排序。成功時(shí)返回True,失敗時(shí)返回False。asort()函數(shù)的語(yǔ)法格式同sort()函數(shù)。ksort()函數(shù)對(duì)數(shù)組按照鍵名排序,保留鍵名到數(shù)據(jù)的關(guān)聯(lián)。本函數(shù)主要用于關(guān)聯(lián)數(shù)組。成功時(shí)返回True,失敗時(shí)返回False。ksort()函數(shù)的語(yǔ)法格式同sort()函數(shù)。<?php//sort排序echo"sort排序:";$fruits=array("lemon","orange","banana","apple");sort($fruits);foreach($fruitsas$key=>$val){echo"$key=$val";}//asort排序echo"<br>asort排序:";$fruits=array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");asort($fruits);foreach($fruitsas$key=>$val){echo"$key=$val";}//ksort排序echo"<br>ksort排序:";$fruits=array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");ksort($fruits);foreach($fruitsas$key=>$val){echo"$key=$val";}?>以上代碼的運(yùn)行結(jié)果如圖7-17所示。4.多維數(shù)組數(shù)組的維數(shù)沒(méi)有限制,數(shù)組的維數(shù)也可以組合。例如,可以讓數(shù)組的第一維用整數(shù)作為索引,第二維使用字符串作為索引,第三維用整數(shù)作為索引等。要訪問(wèn)多維數(shù)組的某個(gè)元素時(shí)需要用到多個(gè)下標(biāo),例如訪問(wèn)二維數(shù)組中的某個(gè)元素就需要兩個(gè)下標(biāo)。例如:<?php$student=array("0"=>array("name"=>"James","sex"=>"male","age"=>"28"),"1"=>array("name"=>"John","sex"=>"male","age"=>"25"),"2"=>array("name"=>"Susan","sex"=>"female","age"=>"24"));Print_r($student);echo"<br>";Print$student[2][age];?>以上代碼的運(yùn)行結(jié)果如圖7-18所示。知識(shí)8PHP日期和時(shí)間函數(shù)1.獲取日期和時(shí)間在PHP中,要獲取當(dāng)前的日期和時(shí)間非常簡(jiǎn)單,只需使用date()函數(shù)即可。date()函數(shù)的語(yǔ)法格式如下:Stringdate(string$format[,int$timestamp])返回按照指定格式顯示的時(shí)間字符串。其中參數(shù)format為顯示格式,而參數(shù)timestamp為時(shí)間戳。如果沒(méi)有給出時(shí)間戳則使用本地當(dāng)前時(shí)間。timestamp為可選參數(shù),默認(rèn)值為time()。其中format的選項(xiàng)很多,具體設(shè)置如表7-7所示。<?php//設(shè)置PHP語(yǔ)言時(shí)區(qū)為Asia/Shanghai,這樣讀取的時(shí)間沒(méi)有時(shí)間差date_default_timezone_set("Asia/Shanghai");//輸出類似:Mondayechodate("l")."<br>";//輸出類似:Tuesday22ndofJanuary201310:35:55PMechodate('ldS\ofFYh:i:sA')."<br>";echodate('\i\t\i\s\t\h\ejS\d\a\y.')."<br>";echodate("Fj,Y,g:ia")."<br>";echodate("m.d.y")."<br>";echodate("j,n,Y")."<br>";echodate('h-i-s,j-m-y')."<br>";echodate('Y年m月d日')."<br>";echodate("H:i:s")."<br>";//輸出由年月日時(shí)分秒組合的字符串echodate("YmdHis")."<br>";echodate("Y-m-dH:i:s")."<br>";?>以上代碼的運(yùn)行結(jié)果如圖7-19所示。在PHP語(yǔ)言中默認(rèn)設(shè)置的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙教版六年級(jí)數(shù)學(xué)上冊(cè)月考試卷
- 2025年人教版(2024)選擇性必修3生物下冊(cè)階段測(cè)試試卷含答案
- 2025年岳麓版八年級(jí)科學(xué)上冊(cè)階段測(cè)試試卷含答案
- 2025年湘教新版七年級(jí)生物上冊(cè)月考試卷含答案
- 2025年全球物流運(yùn)輸網(wǎng)絡(luò)優(yōu)化升級(jí)合同3篇
- 2025年度社交媒體營(yíng)銷效果評(píng)估與優(yōu)化合同3篇
- 2025年外研版四年級(jí)數(shù)學(xué)上冊(cè)階段測(cè)試試卷含答案
- 2025年外研版2024四年級(jí)英語(yǔ)上冊(cè)月考試卷含答案
- 2025年冀教版三年級(jí)語(yǔ)文下冊(cè)階段測(cè)試試卷含答案
- 2025年湘教版選擇性必修2化學(xué)下冊(cè)月考試卷含答案
- 2025年門診部工作計(jì)劃
- 2025福建中閩海上風(fēng)電限公司招聘14人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 智能網(wǎng)聯(lián)汽車技術(shù)應(yīng)用專業(yè)國(guó)家技能人才培養(yǎng)工學(xué)一體化課程標(biāo)準(zhǔn)
- 漢字文化解密學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 安徽省合肥市2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題(含答案)3
- 10以內(nèi)口算題每頁(yè)50道
- 《美洲(第1課時(shí))》示范課教學(xué)設(shè)計(jì)【湘教版七年級(jí)地理下冊(cè)】
- 家庭、學(xué)校、社會(huì)協(xié)同育人PPT課件
- 《供電局實(shí)習(xí)證明 》
- 煤田滅火規(guī)范(試行)
- 高三寒假PPT學(xué)習(xí)教案
評(píng)論
0/150
提交評(píng)論