




已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PHP 5手冊章 5. 基本語法目錄從 HTML 中分離指令分隔符注釋php學(xué)習(xí) 從 HTML 中分離PHP 的腳本由文件中一對特殊的標(biāo)記所引起的內(nèi)容,當(dāng)解釋器分析一個文件時,所有特殊標(biāo)記外的普通文件,解釋器不對其做任何處理,而特殊標(biāo)記內(nèi)文件將作為 PHP 代碼被解釋器分析執(zhí)行。該運(yùn)行機(jī)制將允許您在 HTML 中嵌入 PHP 代碼:PHP 標(biāo)記外的內(nèi)容將被完全獨(dú)立開,不做任何處理,而內(nèi)部的將作為 PHP 代碼解析。用來標(biāo)記 PHP 代碼塊的標(biāo)記共有四套,其中只有兩套總是有效( 和 . . .);另外兩套可以在 php.ini 配置文件中開啟或者關(guān)閉。雖然短格式的標(biāo)記和 ASP 風(fēng)格的標(biāo)記可能比較省力,但是某些情況下您可能必須要使用長格式的標(biāo)記。比如,您打算在 XML 或者 XHTML 中嵌入 PHP 代碼,您將需要使用 形式的標(biāo)記以適應(yīng) XML 的標(biāo)準(zhǔn)。PHP 支持的標(biāo)記為: 例子 5-1. 從 HTML 中分離的方式1.2. This is a shortcut for 3.echo (some editors (like FrontPage) dontlike processing instructions);4.%= $variable; # This is a shortcut for 優(yōu)先選用的方式為第一種方式 ,因?yàn)樗试S您在 XML 結(jié)構(gòu),如 XHTML 的代碼中使用 PHP。第二種方式并非總是可用的。只有當(dāng)您在 php.ini 配置文件中激活 short_open_tag 選項(xiàng),才是可用的。您也可以通過使用 short_tags() 函數(shù)(僅用于 PHP 3),或者使用 -enable-short-tags 選項(xiàng) configure PHP 來激活短格式標(biāo)記。在 php.ini-dist 配置文件中,默認(rèn)是開啟短格式標(biāo)記的,但是建議您不要使用該標(biāo)記。在 PHP 配置文件中開啟選項(xiàng) asp_tags 將激活第四種方式。注: ASP 風(fēng)格的標(biāo)記添加于 PHP 3.0.4注: 當(dāng)開發(fā)大型應(yīng)用程序或者用于分發(fā)的函數(shù)庫,或者在不受您控制的 PHP 服務(wù)器上面開發(fā)程序時,請不要使用短格式的標(biāo)記,因?yàn)槟繕?biāo)服務(wù)器可能并不支持短格式的標(biāo)記。為了便于移植,請保證用于再分發(fā)的代碼中不使用短格式的標(biāo)記。PHP 代碼塊結(jié)束標(biāo)記獎自動包含最近的一個結(jié)尾的新行(如果存在的話)。而且,結(jié)束標(biāo)記自動隱含一個分號; 您不需要為 PHP 代碼塊的最后行追加一個分號。PHP 允許您使用如下的結(jié)構(gòu):php學(xué)習(xí) 例子 5-2. 更高級的脫離This is true.This is false. PHP 將直接輸出結(jié)束標(biāo)記和下一個開始標(biāo)記中的任何非 PHP 代碼。當(dāng)需要輸出大量的文本時,退出 PHP 解析模式將比使用 echo() 或者 print() 或者此類的函數(shù)打印所有文本要更加的有效。指令分隔符指令分隔方式與 C 或者 Perl 類似 - 每個語句由分號格開。結(jié)束標(biāo)記(?)同樣隱含語句的結(jié)束,因此下面的代碼是等價(jià)的: 注釋PHP 支持 C,C+ 和 Unix Shell 風(fēng)格的注釋。例如: “單行”注釋僅僅注釋到行末或者當(dāng)前的 PHP 代碼塊,視乎哪個首先出現(xiàn)。 This is an example.The header above will say This is an example. 小心不要嵌套 C 風(fēng)格的注釋,當(dāng)注釋大量代碼時,可能犯該錯誤。 “單行”注釋僅僅注釋到行末或者當(dāng)前的 PHP 代碼塊,視乎哪個首先出現(xiàn)。這意味著 / ? 后面的 HTML 代碼將被打印出來:? 跳出了 PHP 模式并且返回 HTML 模式,而且 / 注釋符并不會影響到模式的轉(zhuǎn)換。章 6. 類型目錄介紹布爾型整型浮點(diǎn)型字符串?dāng)?shù)組對象資源NULL本文檔中使用的偽類型類型戲法介紹PHP 支持八種原始類型。四種標(biāo)量類型:布爾型(boolean)整型(integer)浮點(diǎn)型(float)(浮點(diǎn)數(shù),也作“double”)字符串(string)兩種復(fù)合類型:數(shù)組(array)對象(object)最后是兩種特殊類型:資源(resource)NULL為了確保代碼的易讀性,本手冊還介紹了一些偽類型:混和(mixed)數(shù)字(number)回饋(callback)您可能還會讀到一些關(guān)于“雙精度(double)”類型的參考。實(shí)際上 double 和 float 是相同的,由于一些歷史的原因,這兩個名稱同時存在。變量的類型通常不是由程序員設(shè)定的,確切地說,是由 PHP 根據(jù)該變量使用的上下文在運(yùn)行時決定的。注: 如果你想查看某個表達(dá)式的值和類型,用 var_dump()。注: 如果你只是想得到一個易讀懂的類型的表達(dá)方式用于調(diào)試,用 gettype()。要查看某個類型,不要用 gettype(),而用 is_type 函數(shù)。以下是一些范例: 如果你要將一個變量強(qiáng)制轉(zhuǎn)換為某類型,可以對其使用強(qiáng)制轉(zhuǎn)換或者 settype() 函數(shù)。注意變量根據(jù)其當(dāng)時的類型在特定場合下會表現(xiàn)出不同的值。更多信息見類型戲法。此外,你還可以參考 PHP 類型比較表看不同類型相互比較的例子。布爾型這是最簡單的類型。boolean 表達(dá)了真值,可以為 TRUE 或 FALSE。注: 布爾類型是 PHP 4 引進(jìn)的。語法要指定一個布爾值,使用關(guān)鍵字 TRUE 或 FALSE。兩個都是大小寫不敏感的。 通常你用某些運(yùn)算符返回 boolean 值,并將其傳遞給流程控制。 / = is an operator which test/ equality and returns a booleanif ($action = show_version) echo The version is 1.23;/ this is not necessary.if ($show_separators = TRUE) echo n;/ .because you can simply typeif ($show_separators) echo n; 轉(zhuǎn)換為布爾值要明示地將一個值轉(zhuǎn)換成 boolean,用 (bool) 或者 (boolean) 來強(qiáng)制轉(zhuǎn)換。但是很多情況下不需要用強(qiáng)制轉(zhuǎn)換,因?yàn)楫?dāng)運(yùn)算符,函數(shù)或者流程控制需要一個 boolean 參數(shù)時,該值會被自動轉(zhuǎn)換。php學(xué)習(xí) 參見類型戲法。當(dāng)轉(zhuǎn)換為 boolean 時,以下值被認(rèn)為是 FALSE:布爾值 FALSE整型值 0(零)浮點(diǎn)型值 0.0(零)空白字符串和字符串 0沒有成員變量的數(shù)組沒有單元的對象特殊類型NULL(包括尚未設(shè)定的變量)所有其它值都被認(rèn)為是 TRUE(包括任何資源)。 警告-1 和其它非零值(不論正負(fù))一樣,被認(rèn)為是 TRUE! 整型一個 integer 是集合 Z = ., -2, -1, 0, 1, 2, . 中的一個數(shù)。參見任意長度整數(shù) / GMP,浮點(diǎn)數(shù) 和 任意精度數(shù)學(xué)庫 / BCMath。語法整型值可以用十進(jìn)制,十六進(jìn)制或八進(jìn)制符號指定,前面可以加上可選的符號(- 或者 +)。如果用八進(jìn)制符號,數(shù)字前必須加上 0(零),用十六進(jìn)制符號數(shù)字前必須加上 0x。 例子 6-1. 整數(shù)文字表達(dá) 在字面上,整型變量正式的結(jié)構(gòu)可以為: 整型數(shù)的字長和平臺有關(guān),盡管通常最大值是大約二十億(32 位有符號)。PHP 不支持無符號整數(shù)。整數(shù)溢出如果你指定一個數(shù)超出了 integer 的范圍,將會被解釋為 float。同樣如果你執(zhí)行的運(yùn)算結(jié)果超出了 integer 范圍,也會返回 float。 警告不幸的是 PHP 中有個 bug,因此當(dāng)有負(fù)數(shù)參與時結(jié)果并不總是正確。例如當(dāng)運(yùn)算 -50000 * $million 時結(jié)果是 -429496728。不過當(dāng)兩個運(yùn)算數(shù)都是正數(shù)時就沒問題。這個問題已經(jīng)在 PHP 4.1.0 中解決了。 PHP 中沒有整除的運(yùn)算符。1/2 產(chǎn)生出浮點(diǎn)數(shù) 0.5。您可以總是舍棄小數(shù)部分,或者使用 round() 函數(shù)。 轉(zhuǎn)換為整形要明示地將一個值轉(zhuǎn)換為 integer,用 (int) 或 (integer) 強(qiáng)制轉(zhuǎn)換。不過大多數(shù)情況下都不需要強(qiáng)制轉(zhuǎn)換,因?yàn)楫?dāng)運(yùn)算符,函數(shù)或流程控制需要一個 integer 參數(shù)時,值會自動轉(zhuǎn)換。您還可以通過函數(shù) intval() 來將一個值轉(zhuǎn)換成整型。參見類型戲法。從布爾值轉(zhuǎn)換FALSE 將產(chǎn)生出 0(零),TRUE 將產(chǎn)生出 1(壹)。從浮點(diǎn)數(shù)轉(zhuǎn)換當(dāng)從浮點(diǎn)數(shù)轉(zhuǎn)換成整數(shù)時,數(shù)字將被取整(丟棄小數(shù)位)。如果浮點(diǎn)數(shù)超出了整數(shù)范圍(通常為 +/- 2.15e+9 = 231),則結(jié)果不確定,因?yàn)闆]有足夠的精度使浮點(diǎn)數(shù)給出一個確切的整數(shù)結(jié)果。在此情況下沒有警告,甚至沒有任何通知!php學(xué)習(xí) (譯者注:)在 Linux 下返回結(jié)果是最小負(fù)數(shù)(-2147483648),而在 Windows 下返回結(jié)果是零(0)。 警告決不要將未知的分?jǐn)?shù)強(qiáng)制轉(zhuǎn)換為 integer,這樣有時會導(dǎo)致意外的結(jié)果。 更多信息見浮點(diǎn)數(shù)精度。 從字符串轉(zhuǎn)換參見字符串轉(zhuǎn)換為數(shù)字。從其它類型轉(zhuǎn)換注意沒有定義從其它類型轉(zhuǎn)換為整型的行為。目前的行為和值先轉(zhuǎn)換為布爾值一樣。不過不要依靠此行為,因?yàn)樗鼤醇油ㄖ馗淖兏↑c(diǎn)型浮點(diǎn)數(shù)(也叫“floats”,“doubles”或“real numbers”)可以用以下任何語法定義: 形式上: LNUM0-9+DNUM(0-9*.LNUM) | (LNUM.0-9*)EXPONENT_DNUM ( (LNUM | DNUM) eE+-? LNUM) 浮點(diǎn)數(shù)的字長和平臺相關(guān),盡管通常最大值是 1.8e308 并具有 14 位十進(jìn)制數(shù)字的精度(64 位 IEEE 格式)。 浮點(diǎn)數(shù)精度顯然簡單的十進(jìn)制分?jǐn)?shù)如同 0.1 或 0.7 不能在不丟失一點(diǎn)點(diǎn)精度的情況下轉(zhuǎn)換為內(nèi)部二進(jìn)制的格式。這就會造成混亂的結(jié)果:例如,floor(0.1+0.7)*10) 通常會返回 7 而不是預(yù)期中的 8,因?yàn)樵摻Y(jié)果內(nèi)部的表示其實(shí)是類似 7.9999999999.。這和一個事實(shí)有關(guān),那就是不可能精確的用有限位數(shù)表達(dá)某些十進(jìn)制分?jǐn)?shù)。例如,十進(jìn)制的 1/3 變成了 0.3333333. . .。所以永遠(yuǎn)不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個浮點(diǎn)數(shù)是否相等。如果確實(shí)需要更高的精度,應(yīng)該使用任意精度數(shù)學(xué)函數(shù)庫或者 gmp 函數(shù)庫。 轉(zhuǎn)換為浮點(diǎn)數(shù)如果您希望了解有關(guān)何時和如何將字符串轉(zhuǎn)換成浮點(diǎn)數(shù)的信息,請查閱標(biāo)題為“將字符串轉(zhuǎn)換為數(shù)字”的有關(guān)章節(jié)。對于其它類型的值,其情況類似于先將值轉(zhuǎn)換成整型,然后再轉(zhuǎn)換成浮點(diǎn)。請參閱“轉(zhuǎn)換為整型”有關(guān)章節(jié)以獲取更多信息。字符串string 是一系列字符。在 PHP 中,字符和字節(jié)一樣,也就是說,一共有 256 種不同字符的可能性。這也暗示 PHP 對 Unicode 沒有本地支持。請參閱函數(shù) utf8_encode() 和 utf8_decode() 以了解有關(guān) Unicode 支持。注: 一個字符串變得非常巨大也沒有問題,PHP 沒有給字符串的大小強(qiáng)加實(shí)現(xiàn)范圍,所以完全沒有理由擔(dān)心長字符串。語法字符串可以用三種字面上的方法定義。單引號雙引號定界符單引號指定一個簡單字符串的最簡單的方法是用單引號(字符 )括起來。要表示一個單引號,需要用反斜線()轉(zhuǎn)義,和很多其它語言一樣。如果在單引號之前或字符串結(jié)尾需要出現(xiàn)一個反斜線,需要用兩個反斜線表示。注意如果你試圖轉(zhuǎn)義任何其它字符,反斜線本身也會被顯示出來!所以通常不需要轉(zhuǎn)義反斜線本身。注: 在 PHP 3 中,此情況下將發(fā)出一個 E_NOTICE 級的警告。注: 和其他兩種語法不同,單引號字符串中出現(xiàn)的變量和轉(zhuǎn)義序列不會被變量的值替代。 雙引號如果用雙引號()括起字符串,PHP 懂得更多特殊字符的轉(zhuǎn)義序列:表格 6-1. 轉(zhuǎn)義字符序列含義n換行(LF 或 ASCII 字符 0x0A(10)r回車(CR 或 ASCII 字符 0x0D(13)t水平制表符(HT 或 ASCII 字符 0x09(9)反斜線$美元符號雙引號0-71,3此正則表達(dá)式序列匹配一個用八進(jìn)制符號表示的字符 x0-9A-Fa-f1,2此正則表達(dá)式序列匹配一個用十六進(jìn)制符號表示的字符 此外,如果試圖轉(zhuǎn)義任何其它字符,反斜線本身也會被顯示出來!雙引號字符串最重要的一點(diǎn)是其中的變量名會被變量值替代。細(xì)節(jié)參見字符串解析。定界符另一種給字符串定界的方法使用定界符語法(“”)。應(yīng)該在 之后提供一個標(biāo)識符,然后是字符串,然后是同樣的標(biāo)識符結(jié)束字符串。結(jié)束標(biāo)識符必須從行的第一列開始。同樣,標(biāo)識符也必須遵循 PHP 中其它任何標(biāo)簽的命名規(guī)則:只能包含字母數(shù)字下劃線,而且必須以下劃線或非數(shù)字字符開始。 警告很重要的一點(diǎn)必須指出,結(jié)束標(biāo)識符所在的行不能包含任何其它字符,可能除了一個分號(;)之外。這尤其意味著該標(biāo)識符不能被縮進(jìn),而且在分號之前和之后都不能有任何空格或制表符。同樣重要的是要意識到在結(jié)束標(biāo)識符之前的第一個字符必須是你的操作系統(tǒng)中定義的換行符。例如在 Macintosh 系統(tǒng)中是 r。如果破壞了這條規(guī)則使得結(jié)束標(biāo)識符不“干凈”,則它不會被視為結(jié)束標(biāo)識符,PHP 將繼續(xù)尋找下去。如果在這種情況下找不到合適的結(jié)束標(biāo)識符,將會導(dǎo)致一個在腳本最后一行出現(xiàn)的語法錯誤。 定界符文本表現(xiàn)的就和雙引號字符串一樣,只是沒有雙引號。這意味著在定界符文本中不需要轉(zhuǎn)義引號,不過仍然可以用以上列出來的轉(zhuǎn)義代碼。變量會被展開,但當(dāng)在定界符文本中表達(dá)復(fù)雜變量時和字符串一樣同樣也要注意。 例子 6-2. 定界符字符串例子?php$str = foo = Foo;$this-bar = array(Bar1, Bar2, Bar3);$foo = new foo();$name = MyName;echo foo.Now, I am printing some $foo-bar1.This should print a capital A: x41EOT;? 注: 定界符支持是 PHP 4 中加入的。變量解析當(dāng)用雙引號或者定界符指定字符串時,其中的變量會被解析。有兩種語法,一種簡單的和一種復(fù)雜的。簡單語法最通用和方便,它提供了解析變量,數(shù)組值,或者對象屬性的方法。復(fù)雜語法是 PHP 4 引進(jìn)的,可以用花括號括起一個表達(dá)式。簡單語法如果遇到美元符號($),解析器會盡可能多地取得后面的字符以組成一個合法的變量名。如果你想明示指定名字的結(jié)束,用花括號把變量名括起來。 同樣也可以解析數(shù)組索引或者對象屬性。對于數(shù)組索引,右方括號()標(biāo)志著索引的結(jié)束。對象屬性則和簡單變量適用同樣的規(guī)則,盡管對于對象屬性沒有像變量那樣的小技巧。php學(xué)習(xí) red, banana = yellow);/ Works but note that this works differently outside string-quotesecho A banana is $fruitsbanana.;/ Worksecho A banana is $fruitsbanana.;/ Works but PHP looks for a constant named banana first/ as described below.echo A banana is $fruitsbanana.;/ Wont work, use braces.This results in a parse error.echo A banana is $fruitsbanana.;/ Worksecho A banana is . $fruitsbanana . .;/ Worksecho This square is $square-width meters broad.;/ Wont work. For a solution, see the complex syntax.echo This square is $square-width00 centimeters broad.;? 對于任何更復(fù)雜的情況,應(yīng)該使用復(fù)雜語法。復(fù)雜(花括號)語法不是因?yàn)檎Z法復(fù)雜而稱其為復(fù)雜,而是因?yàn)橛么朔椒梢园瑥?fù)雜的表達(dá)式。事實(shí)上,用此語法你可以在字符串中包含任何在名字空間的值。僅僅用和在字符串之外同樣的方法寫一個表達(dá)式,然后用 和 把它包含進(jìn)來。因?yàn)椴荒苻D(zhuǎn)義“”,此語法僅在 $ 緊跟在 后面時被識別(用“$”或者“$”來得到一個字面上的“$”)。用一些例子可以更清晰: width00 centimeters broad.;/ Worksecho This works: $arr43;/ This is wrong for the same reason as $foobar is wrong/ outside a string.In otherwords, it will still work but/ because PHP first looks for a constant named foo, it will/ throw an error of level E_NOTICE (undefined constant).echo This is wrong: $arrfoo3;/ Works.When using multi-dimensional arrays, always use/ braces around arrays when inside of stringsecho This works: $arrfoo3;/ Works.echo This works: . $arrfoo3;echo You can even write $obj-values3-name;echo This is the value of the var named $name: $name;? 訪問字符串中的字符字符串中的字符可以通過在字符串之后用花括號指定所要字符從零開始的偏移量來訪問。注: 為了向下兼容,仍然可以用方括號。不過此語法在 PHP 4 中不贊成使用。 例子 6-3. 一些字符串例子 實(shí)用函數(shù)及操作符字符串可以用“.”(點(diǎn))運(yùn)算符連接。注意這里不能用“+”(加)運(yùn)算符。更多信息參見字符串運(yùn)算符。有很多實(shí)用函數(shù)來改變字符串。php學(xué)習(xí) 普通函數(shù)見字符串函數(shù)庫一節(jié),高級搜索和替換見正則表達(dá)式函數(shù)(兩種口味:Perl 和 POSIX 擴(kuò)展)。還有 URL 字符串函數(shù),以及加密解密字符串的函數(shù)(mcrypt 和 mhash)。最后,如果還是找不到你要的函數(shù),參見字符類型函數(shù)庫。字符串轉(zhuǎn)換您可以用 (string) 標(biāo)記或者 strval() 函數(shù)將一個值轉(zhuǎn)換為字符串。當(dāng)某表達(dá)式需要字符串時,字符串的轉(zhuǎn)換會在表達(dá)式范圍內(nèi)自動完成。例如當(dāng)你使用 echo() 或者 print() 函數(shù)時,或者將一個變量值與一個字符串進(jìn)行比較的時候。閱讀手冊中有關(guān)類型和類型戲法中的部分有助于更清楚一些。參見 settype()。布爾值 TRUE 將被轉(zhuǎn)換為字符串 1,而值 FALSE 將被表示為 (即空字符串)。這樣您就可以隨意地在布爾值和字符串之間進(jìn)行比較。整數(shù)或浮點(diǎn)數(shù)數(shù)值在轉(zhuǎn)換成字符串時,字符串即為表示這些數(shù)值數(shù)字(浮點(diǎn)數(shù)還包含有指數(shù)部分)。數(shù)組將被轉(zhuǎn)換成字符串 Array,因此您無法通過 echo() 或者 print() 函數(shù)來輸出數(shù)組的內(nèi)容。請參考下文以獲取更多提示。對象將被轉(zhuǎn)換成字符串 Object。如果您因?yàn)檎{(diào)試需要,需要將對象的成員變量打印出來,請閱讀下文。如果您希望得到該對象所依附的類的名稱,請使用函數(shù) get_class()。資源類型將會以 Resource id #1 的格式被轉(zhuǎn)換成字符串,其中 1 是 PHP 在運(yùn)行時給資源指定的唯一標(biāo)識。如果您希望獲取資源的類型,請使用函數(shù) get_resource_type().NULL 將被轉(zhuǎn)換成空字符串。正如以上所示,將數(shù)組、對象或者資源打印出來,并不能給您提供任何關(guān)于這些值本身的有用的信息。請參閱函數(shù) print_r() 和 var_dump(),對于調(diào)試來說,這些是更好的打印值的方法。您可以將 PHP 的值轉(zhuǎn)換為字符串以永久地儲存它們。這種方法被稱為串行化,您可以用函數(shù) serialize() 來完成該操作。如果您在安裝 PHP 時建立了 WDDX 支持,您還可以將 PHP 的值串行化為 XML 結(jié)構(gòu)。字符串轉(zhuǎn)換為數(shù)值當(dāng)一個字符串被當(dāng)作數(shù)字來求值時,根據(jù)以下規(guī)則來決定結(jié)果的類型和值。如果包括“.”,“e”或“E”其中任何一個字符的話,字符串被當(dāng)作 float 來求值。否則就被當(dāng)作整數(shù)。該值由字符串最前面的部分決定。如果字符串以合法的數(shù)字?jǐn)?shù)據(jù)開始,就用該數(shù)字作為其值,否則其值為 0(零)。合法數(shù)字?jǐn)?shù)據(jù)由可選的正負(fù)號開始,后面跟著一個或多個數(shù)字(可選地包括十進(jìn)制分?jǐn)?shù)),后面跟著可選的指數(shù)。指數(shù)是一個“e”或者“E”后面跟著一個或多個數(shù)字。 此轉(zhuǎn)換的更多信息見 Unix 手冊中關(guān)于 strtod(3) 的部分。如果你想測試本節(jié)中的任何例子,可以拷貝和粘貼這些例子并且加上下面這一行自己看看會發(fā)生什么: ?phpecho $foo=$foo; type is . gettype ($foo) . n;? 不要指望在將一個字符轉(zhuǎn)換成整型時能夠得到該字符的編碼(您可能也會在 C 中這么做)。如果您希望在字符編碼和字符之間轉(zhuǎn)換,請使用 ord() 和 chr() 函數(shù)。數(shù)組PHP 中的數(shù)組實(shí)際上是一個有序圖。圖是一種把 values 映射到 keys 的類型。此類型在很多方面做了優(yōu)化,因此你可以把它當(dāng)成真正的數(shù)組來使用,或列表(矢量),散列表(是圖的一種實(shí)現(xiàn)),字典,集合,棧,隊(duì)列以及更多可能性。因?yàn)榭梢杂昧硪粋€ PHP 數(shù)組作為值,也可以很容易地模擬樹。解釋這些結(jié)構(gòu)超出了本手冊的范圍,但對于每種結(jié)構(gòu)你至少會發(fā)現(xiàn)一個例子。要得到這些結(jié)構(gòu)的更多信息,我們建議你參考有關(guān)此廣闊主題的外部著作。語法定義 array()可以用 array() 語言結(jié)構(gòu)來新建一個 array。它接受一定數(shù)量用逗號分隔的 key = value 參數(shù)對。 array( key =value, .)/ key 可以是 integer 或者 string/ value 可以是任何值 bar, 12 = true);echo $arrfoo; / barecho $arr12;/ 1? key 可以是 integer 或者 string。如果鍵名是一個 integer 的標(biāo)準(zhǔn)表達(dá)方法,則被解釋為整數(shù)(例如 8 將被解釋為 8,而 08 將被解釋為 08)。PHP 中數(shù)組下標(biāo)的變量類型不會對數(shù)組造成影響,數(shù)組的類型只有一種,它可以同時包含整型和字符串型的下標(biāo)。值可以是任何值。 array(6 = 5, 13 = 9, a = 42);echo $arrsomearray6;/ 5echo $arrsomearray13;/ 9echo $arrsomearraya;/ 42? 如果對給出的值沒有指定鍵名,則取當(dāng)前最大的整數(shù)索引值,而新的鍵名將是該值加一。如果你指定的鍵名已經(jīng)有了值,則該值會被覆蓋。 43, 32, 56, b = 12);/ .this arrayarray(5 = 43, 6 = 32, 7 = 56, b = 12);? 警告自 PHP 4.3.0 起,上述的索引生成方法改變了。如今如果你給一個當(dāng)前最大鍵名是負(fù)值的數(shù)組添加一個新值,則新生成的的索引將為零(0)。以前新生成的索引為當(dāng)前最大索引加一,和正值的索引相同。 使用 TRUE 作為鍵名將使 integer 1 成為鍵名。使用 FALSE 作為鍵名將使 integer 0 成為鍵名。使用 NULL 作為鍵名將等同于使用空字符串。使用空字符串作為鍵名將新建(或覆蓋)一個用空字符串作為鍵名的值,這和用空的方括號不一樣。不能用數(shù)組和對象作為鍵名。這樣做會導(dǎo)致一個警告:Illegal offset type。用方括號的語法新建修改可以通過明示地設(shè)定值來改變一個現(xiàn)有的數(shù)組。這是通過在方括號內(nèi)指定鍵名來給數(shù)組賦值實(shí)現(xiàn)的。也可以省略鍵名,在這種情況下給變量名加上一對空的方括號(“”)。 php學(xué)習(xí) $arrkey = value;$arr = value;/ key 可以是 integer 或者 string/ value 可以為任何值。如果 $arr 還不存在,將會新建一個。這也是一種定義數(shù)組的替換方法。要改變一個值,只要給它賦一個新值。如果要刪除一個鍵名值對,要對它用 unset()。 1, 12 = 2);$arr = 56;/ This is the same as $arr13 = 56;/ at this point of the script$arrx = 42; / This adds a new element to/ the array with key xunset($arr5); / This removes the element from the arrayunset($arr);/ This deletes the whole array? 注: 如上所述,如果你給出方括號但沒有指定鍵名,則取當(dāng)前最大整數(shù)索引值,新的鍵名將是該值 + 1。如果當(dāng)前還沒有整數(shù)索引,則鍵名將為 0。如果制定的鍵名已經(jīng)有值了,該值將被覆蓋。 警告自 PHP 4.3.0 起,上述的索引生成方法改變了。如今如果你給一個當(dāng)前最大鍵名是負(fù)值的數(shù)組添加一個新值,則新生成的的索引將為零(0)。以前新生成的索引為當(dāng)前最大索引加一,和正值的索引相同。 注意這里所使用的最大整數(shù)鍵名不一定當(dāng)前就在數(shù)組中。它只要在上次數(shù)組重新生成索引后曾經(jīng)存在過就行了。以下例子說明了: $value) unset($array$i);print_r($array);/ 添加一個單元(注意新的鍵名是 5,而不是你可能以為的 0)$array = 6;print_r($array);/ 重新索引:$array = array_values($array);$array = 7;print_r($array);? 以上例子將產(chǎn)生如下輸出: Array(0 = 11 = 22 = 33 = 44 = 5)Array()Array(5 = 6)Array(0 = 61 = 7)實(shí)用函數(shù)有相當(dāng)多的實(shí)用函數(shù)作用于數(shù)組,參見數(shù)組函數(shù)庫一節(jié)。注: unset() 函數(shù)允許取消一個數(shù)組中的鍵名。要注意數(shù)組將不會重建索引。 one, 2 = two, 3 = three );unset( $a2 );/* 將產(chǎn)生一個數(shù)組,定義為$a = array( 1=one, 3=three);而不是$a = array( 1 = one, 2 = three);*/$b = array_values($a);/ Now b is array(1 = one, 2 =three)? foreach 控制結(jié)構(gòu)是專門用于數(shù)組的。它提供了一個簡單的方法來遍歷數(shù)組。數(shù)組做什么和不做什么為什么 $foobar 錯了?應(yīng)該始終在用字符串表示的數(shù)組索引上加上引號。例如用 $foobar 而不是 $foobar。但是為什么 $foobar 錯了呢?你可能在老的腳本中見過如下語法: 這樣是錯的,但可以正常運(yùn)行。那么為什么錯了呢?原因是此代碼中有一個未定義的常量(bar)而不是字符串(bar注意引號),而 PHP 可能會在以后定義此常量,不幸的是你的代碼中有同樣的名字。它能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京郵電大學(xué)《國際投資與信貸》2023-2024學(xué)年第二學(xué)期期末試卷
- 公共交通線路審批管理制度
- 直埋管施工方案
- 特種陶瓷磨豆?jié){機(jī)問卷調(diào)查
- 城市路燈井施工方案
- 江西省新八校聯(lián)考2024-2025學(xué)年高三上學(xué)期1月期末聯(lián)考英語試題【含答案】
- 甘肅省酒泉市2024-2025學(xué)年高一(下)開學(xué)生物試卷-(含解析)
- 城市公共廣告施工方案
- 電表安裝施工方案
- 反濾土工布施工方案
- 2025年山西同文職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫帶答案
- 2025年安徽衛(wèi)生健康職業(yè)學(xué)院單招職業(yè)技能測試題庫審定版
- 2025年01月中國疾控中心信息中心公開招聘1人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 安徽2025年安徽汽車職業(yè)技術(shù)學(xué)院教職工校園招聘筆試歷年參考題庫附帶答案詳解
- 中央2025年中國科協(xié)所屬單位招聘社會在職人員14人筆試歷年參考題庫附帶答案詳解-1
- 2025年中國移動通信集團(tuán)貴州限公司招聘高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 自控力-電子書
- 2025年江蘇電子信息職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年北京衛(wèi)生職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 臨床基于高級健康評估的高血壓Ⅲ級合并腦梗死患者康復(fù)個案護(hù)理
- 山東黃河河務(wù)局公開招考2025高校畢業(yè)生高頻重點(diǎn)提升(共500題)附帶答案詳解
評論
0/150
提交評論