零點起飛學PHP之數(shù)組_第1頁
零點起飛學PHP之數(shù)組_第2頁
零點起飛學PHP之數(shù)組_第3頁
零點起飛學PHP之數(shù)組_第4頁
零點起飛學PHP之數(shù)組_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第5章 數(shù)組數(shù)組是將多個數(shù)據(jù)集合在一起的一個形式。它在PHP中是非常強大的一種數(shù)據(jù)類型,可以用來存儲多種類型的多個數(shù)據(jù)。本章將首先介紹數(shù)組的優(yōu)勢,然后循序漸進地從簡單創(chuàng)建一個數(shù)組、修改數(shù)組中的數(shù)據(jù)到常用的遍歷數(shù)組再到靈活操作數(shù)組中指針的形式來學習。從而讓讀者很好地掌握PHP的數(shù)組。15.1 使用數(shù)組數(shù)組在一些方面有其獨特的優(yōu)勢。本節(jié)將介紹數(shù)組使用方法的基礎知識,以及關聯(lián)數(shù)組和索引數(shù)組的使用和應用方面。從而讓讀者對如何正確使用數(shù)組有一個明確的了解。25.1.1 使用數(shù)組的優(yōu)勢數(shù)組的優(yōu)勢在于可以集中處理大批量的數(shù)據(jù),而不需要每次更換變量名。由于是集中處理數(shù)據(jù),所以處理方式上有很多優(yōu)化和改進。PHP

2、中提供了專門的數(shù)組運算符以及非常多的操作數(shù)組的函數(shù),因此PHP中的數(shù)組使用可以非常靈活。當然靈活性的提高是建立在不同細節(jié)上的,因此我們就需要從細節(jié)講起,讓讀者了解數(shù)組的每一個細節(jié),然后根據(jù)需要來靈活操作數(shù)組。35.1.1 使用數(shù)組的優(yōu)勢我們不妨來設想下面這個情景:如果要求你統(tǒng)計一個班級中成績的平均分,那么我們必須要聲明等于學生個數(shù)的變量來存儲每個人的成績,然后再將所有成績相加后再取得平均分簡略的代碼可以寫成如下的形式:01我們可以看到,這種形式需要聲明很多變量來存儲學生的成績,45.1.1 使用數(shù)組的優(yōu)勢而使用數(shù)組實現(xiàn)同樣的功能,我們可以把程序改為如下所示的形式:01使用數(shù)組實現(xiàn)相同功能的代碼

3、精簡度是顯而易見的,當然這里只是作為一個演示,讀者此刻無需理解代碼中使用的函數(shù)。55.1.2 數(shù)組使用基礎在上一小節(jié)中我們已經(jīng)了解了數(shù)組所具備的優(yōu)勢,本節(jié)我們就來講解使用數(shù)組的基礎知識,主要包括定義數(shù)組、訪問數(shù)組元素、添加/修改數(shù)組元素和刪除數(shù)組元素的知識。61.定義數(shù)組PHP中定義數(shù)組使用的是array結構,它的語法形式如下所示:array array (mixed values )這是定義數(shù)組的最基本形式,array的參數(shù)被稱元素可以是0個或者多個不同類型的數(shù)據(jù),每個參數(shù)為“索引=值”的鍵值對形式。如果索引被省略則由系統(tǒng)自動添加從0開始的整數(shù)索引,這種由系統(tǒng)指定索引的函數(shù)被稱為索引數(shù)組。數(shù)

4、組中元素的個數(shù)被稱為數(shù)組的長度,它會隨著元素的增減而變化。下面就來定義一個數(shù)組:$arr=array(98,hello,67,A,85,NULL);上面的代碼中$arr是數(shù)組的名稱,用來保存定義的數(shù)組。該數(shù)組的長度為6。72.訪問數(shù)組元素訪問數(shù)組中的元素是通過數(shù)組名指定索引來完成的,語法形式如下所示:數(shù)組名索引語法中的索引被放在方括號中,可以為變量、常量或者表達式。82.訪問數(shù)組元素【示例5-1】演示訪問數(shù)組中的元素。從運行結果可以看到代碼正確訪問到了數(shù)組中的元素。我們還可以把一個變量作為數(shù)組的下標來訪問數(shù)組的元素,形式如下所示:數(shù)組名變量名92.訪問數(shù)組元素【示例5-2】演示使用變量作為數(shù)組

5、下標來訪問數(shù)組中的元素。從運行結果可以看到,我們可以采用這種方式來正確輸出數(shù)組對應的元素。我們還可以將一個表達式作為數(shù)組的下標來訪問數(shù)組的元素?!臼纠?-3】演示使用表達式作為數(shù)組下標來訪問數(shù)組中的元素。以上代碼中我們只使用了簡單的示例來講解,讀者可以在實際使用時候融會貫通。105.2 數(shù)組常用操作本節(jié)將要學習的是常用的數(shù)組操作,主要包括遍歷、比較、合并、分割、排序和過濾數(shù)組元素。在學習這些知識之前我們首先需要認識三個函數(shù)count、print_r和var_dump,他們的原型如下所示:int count ( mixed $var , int $mode )bool print_r ( mix

6、ed $expression , bool $return )void var_dump ( mixed $expression , mixed $expression , $. )count函數(shù)用來計算數(shù)組中元素的個數(shù)或者對象中屬性的個數(shù),這里我們只用來計算數(shù)組元素的個數(shù)。print_r函數(shù)用來打印變量的詳細信息。var_dump函數(shù)用來打印一個或多個表達式的結構信息,包括表達式的類型與值。115.2.1 for循環(huán)遍歷數(shù)組遍歷數(shù)組即依次對數(shù)組中的每個元素進行訪問且僅訪問一次。我們知道默認數(shù)組的索引值是從0開始遞增的,而且可以將變量作為索引來訪問數(shù)組的元素。因此,我們完全可以使用循環(huán)遞增一個

7、作為索引的變量來遍歷一個數(shù)組。【示例5-4】演示使用for循環(huán)遍歷輸出一個數(shù)組中的元素。結合代碼我們可以看到,通過簡單的for循環(huán)語句遍歷輸出了數(shù)組的所有元素。125.2.2 合并數(shù)組合并數(shù)組即為將兩個或者多個數(shù)組合并為一個數(shù)組。合并數(shù)組有對應的運算符和多個函數(shù)可以完成,他們的區(qū)別就在于使用不同的規(guī)則對數(shù)組進行合并。131.使用聯(lián)合運算符合并數(shù)組PHP中有專門的數(shù)組運算符,用來合并數(shù)組的運算符稱為聯(lián)合運算符,它的符號與加法的符號相同。使用的形式如下:$arr = $arr1 + $arr2它會將右操作數(shù)中與左操作數(shù)中相同索引的元素去除后將剩余元素加在左操作數(shù)后而不會發(fā)生覆蓋。【示例5-5】演示

8、數(shù)組聯(lián)合運算符(+)的使用。從以上輸出結果就可以看到,第一個數(shù)組中的元素并不會被覆蓋。142.使用系統(tǒng)函數(shù)合并數(shù)組基本的合并數(shù)組函數(shù)是array_merge函數(shù),它可以將一個或者多個數(shù)組合并起來,將后一個數(shù)組的元素加在前一個數(shù)組的末尾。它的函數(shù)原型如下:array array_merge ( array $array1 , array $array2 , array $. )參數(shù)array1、array2為將要合并的數(shù)組,該函數(shù)的特點是可以一次合并多個數(shù)組?!臼纠?-6】演示使用array_merge函數(shù)合并多個數(shù)組。在上面的代碼中分別使用array_merge函數(shù)合并兩個和三個數(shù)組,并輸出各

9、個數(shù)組的詳細信息。這里需要讀者了解的是該函數(shù)不會覆蓋數(shù)組的元素。155.2.3 獲取數(shù)組的交集和差集獲取數(shù)組的交集即為獲取指定數(shù)組與其他數(shù)組中相同的元素;獲取數(shù)組的差集即為獲取指定數(shù)組與其他數(shù)組中不同的元素。在PHP中提供了獲取交集和差集的多個函數(shù),這里只講解最主要的兩個,他們的函數(shù)原型如下:array array_intersect ( array $array1 , array $array2 , array $ . )/獲取數(shù)組的交集array array_diff ( array $array1 , array $array2 , array $ . )/獲取數(shù)組的差集這兩個函數(shù)均可接

10、受多個參數(shù),而且均會返回函數(shù)中參數(shù)array1與其他數(shù)組的交集(差集)。這里我們也可借用數(shù)學中的題目來學習這個函數(shù)。165.2.3 獲取數(shù)組的交集和差集例如有兩個數(shù)組$arr1和$arr2用來保存兩組參加知識競賽學生的學號。前提是一個學生可以參加多項競賽,那么我們就可以用以上函數(shù)來取得兩項競賽都參加的學生(交集),同樣也可以取得一組中只參加一項競賽的學生?!臼纠?-7】使用array_intersect函數(shù)和array_diff函數(shù)獲取學生數(shù)組的交集和差集并輸出。與數(shù)學中只能獲取數(shù)值的交集與差集不同的是,PHP中可以使用以上兩個函數(shù)來獲取其他類型元素的交集和差集?!臼纠?-8】演示使用arra

11、y_intersect函數(shù)和array_diff函數(shù)獲取其他類型數(shù)組的交集和差集。使用array_intersect函數(shù)和array_diff函數(shù)獲取多個數(shù)組的交集和差集的使用與獲取兩個數(shù)組的交集和差集類似,這里就不再詳細講解。175.2.4 數(shù)值元素相關計算在使用數(shù)組的過程中很多時候需要對數(shù)組中的值進行求值運算。在本章開頭的代碼中,就使用了array_num來計算數(shù)組中元素的和。除了計算和的函數(shù)外還提供了array_product函數(shù)來計算數(shù)組中元素的乘積。本節(jié)我們就來介紹這兩個系統(tǒng)函數(shù)。181.array_sumarray_sum函數(shù)用來計算數(shù)組中所有值的和,它的函數(shù)原型如下:number

12、 array_sum ( array $array )參數(shù)array即為要求和的數(shù)組。注意:array_sum函數(shù)會將數(shù)字字符串轉換為數(shù)值,將布爾值TRUE轉換為1,而把其他不能轉換為數(shù)值的通常轉換為0來計算?!臼纠?-9】演示使用array_sum計算數(shù)組中元素的值。192.array_productarray_product函數(shù)用來計算數(shù)組中所有值的乘積,它的函數(shù)原型如下:number array_product ( array $array )參數(shù)array即為要求乘積的數(shù)組。注意:與array_sum函數(shù)類似的,array_product函數(shù)會將數(shù)字字符串轉換為數(shù)值,將布爾值TRUE轉

13、換為1,而把其他不能轉換為數(shù)值的通常轉換為0來計算。因此對于含有不能轉換為數(shù)值的元素的數(shù)組使用該函數(shù)是無實際意義的,因為任何值與0的乘積都為0。202.array_product【示例5-10】演示使用array_product函數(shù)計算數(shù)組中元素的乘積。從運行結果我們可以看到代碼第5行求取數(shù)組$arr2中元素的乘積得到的結果為0,這是因為在代碼第3行中的數(shù)組元素“hello”會被轉換為0導致的,因此我們實際應用中應該盡量避免這種情況。215.3 增加與刪除數(shù)組元素在PHP中,數(shù)組定義后,通常不是一成不變。在程序執(zhí)行過程中,數(shù)組的元素可能被增加、刪除和修改,這也是PHP的數(shù)組之所以非常強大的一個

14、原因。下面就來詳細介紹這些知識。225.3.1 添加/修改數(shù)組元素在有些情況下,數(shù)組中的元素并不是在定義數(shù)組時候就可以確定的,通常會在程序運行時動態(tài)地向數(shù)組中增加元素。為數(shù)組添加元素的語法類似于賦值,如下所示:數(shù)組名索引 = 值為數(shù)組增加元素需要使用未在數(shù)組中使用的索引或者不指定索引,不指定索引添加的數(shù)組索引同樣由系統(tǒng)指定,指定規(guī)則為獲取當前數(shù)組中最大整數(shù)索引值并在其基礎上加1作為新元素的索引。在接下來的示例中將用到rand函數(shù),它用來生成隨機數(shù),函數(shù)原型如下:int rand ( int $min , int $max )參數(shù)min和max分別用來指定生成的隨機數(shù)的最小和最大范圍。235.3

15、.1 添加/修改數(shù)組元素【示例5-11】演示為數(shù)組添加元素。本段代碼需要讀者理解代碼中指定索引和不指定索引的形式下元素索引的變化,當代碼第9行為鍵指定為8的時候,第11行添加的元素的鍵就為會以8作為基礎遞增。修改數(shù)組中的元素只要訪問到指定的元素,然后為其重新賦值即可,語法形式如下:數(shù)組名索引 = 值【示例5-12】演示修改數(shù)組中的元素。從輸出結果我們可以明確看到數(shù)組被正確修改。245.3.2 刪除數(shù)組/數(shù)組中的元素當數(shù)組中的元素不再需要的時候我們就可以刪除它。同樣的當整個數(shù)組不再需要的時候我們同樣可以刪除整個數(shù)組。完成這這些操作可以使用的函數(shù)是unset,它用來釋放指定的變量,它的函數(shù)原型如下

16、:void unset ( mixed $var , mixed $var , $. )unset可以接受多個參數(shù),參數(shù)var即為需要釋放的變量,在本章學習中我們用來釋放數(shù)組中的元素和數(shù)組。【示例5-13】演示使用unset函數(shù)釋放數(shù)組元素和數(shù)組。從運行結果中我們可以看到指定的元素和數(shù)組都被刪除。在第14行代碼刪除整個數(shù)組后,在第16行嘗試訪問數(shù)組會提示變量未定義。需要注意的是使用unset函數(shù)刪除數(shù)組元素并不會影響數(shù)組的索引。255.4 遍歷數(shù)組遍歷數(shù)組即依次對數(shù)組中的每個元素進行訪問且僅訪問一次。由于遍歷是依次訪問,而且數(shù)組的索引又是依次遞增的。因此使用常規(guī)的循環(huán)都可以完成對數(shù)組的遍歷。一

17、些常用的操作也是基于遍歷來完成的,我們也在本節(jié)講解。265.4.1 排序數(shù)組排序在數(shù)組中是比較常用的操作。例如可以用來完成根據(jù)學生的成績進行排名等操作。首先我們來使用for循環(huán)來對一個數(shù)組的元素進行排序?!臼纠?-14】演示使用for循環(huán)對一個數(shù)組中的元素進行從大到小的排序。從運行結果排序后的數(shù)組可以看出,我們完成了對數(shù)組的排序。由于排序的語句(代碼中513行)是相對固定的,因此我們就可以將其封裝為函數(shù)來使用。275.4.1 排序數(shù)組【示例5-15】演示將示例5-14中完成排序的代碼封裝為函數(shù)并對多個數(shù)組進行排序。從運行結果我們可以看到,使用我們的自定義函數(shù)很輕松就完成了對三個數(shù)組的排序,這也

18、再一次體現(xiàn)了函數(shù)的優(yōu)勢。由于排序操作在數(shù)組中很常用,因此PHP提供了多個系統(tǒng)排序函數(shù)供我們使用,他們主要有sort、rsort和usort。這三個函數(shù)的原型如下所示:bool sort ( array &$array , int $sort_flags )/用于對數(shù)組正向(從小到大)排序bool rsort ( array &$array , int $sort_flags )/用于對數(shù)組逆向(從大到?。┡判蜻@兩個函數(shù)的使用方法類似,參數(shù)array為要進行排序的數(shù)組;參數(shù)fort_flags用來改變排序的方式,主要有如下三個選項:SORT_REGULAR:正常比較元素(默認方式);SORT_N

19、UMERIC:元素被作為數(shù)字來比較;SORT_STRING:元素被作為字符串來比較。285.4.1 排序數(shù)組【示例5-16】演示使用sort函數(shù)對數(shù)組進行排序。注意:在使用sort函數(shù)對字符串進行排序時候,會按照字符對應的ASCII值進行排序。對混合類型的數(shù)組進行排序的時候可能會產(chǎn)生無法預料的結果。sort和rsort函數(shù)的使用和理解都比較簡單,這里就不再做詳細講解。另一個與排序數(shù)組類似的函數(shù)是shuffle函數(shù),它用來對數(shù)組進行隨機排序即將數(shù)組元素的順序打亂,它的原型如下:bool shuffle ( array &$array )參數(shù)array即為需要進行隨機排序的數(shù)組,它的使用非常簡單。

20、【示例5-17】演示使用shuffle函數(shù)對數(shù)組進行隨機排序。由于這個函數(shù)輸出結果是隨機的,因此每次的輸出結果可能會不同。295.4.2 過濾數(shù)組中的元素過濾數(shù)組中的元素是一個非常有用的操作。例如可以對分數(shù)進行過濾,將100以上的分數(shù)從數(shù)組中刪除。還可以將混合類型數(shù)組中的字符串元素輸出為一個新數(shù)組。也可以在數(shù)組中搜索指定的值等等的操作。305.4.2 過濾數(shù)組中的元素【示例5-18】演示使用自定義函數(shù)刪除數(shù)組中的偶數(shù)元素。從運行的結果我們可以看出,我們的自定義函數(shù)成功過濾了數(shù)組中的偶數(shù)值。這個自定義的函數(shù)會修改原來的數(shù)組。下面我們來定義一個返回數(shù)組中0100之間元素的函數(shù),并且返回一個新的數(shù)組

21、。315.4.2 過濾數(shù)組中的元素【示例5-19】使用自定義函數(shù)返回數(shù)組中0100之間的元素組成的數(shù)組。除了我們可以這樣自定義數(shù)組來過濾數(shù)組元素外,PHP還提供了array_filter函數(shù)來通過自定義的回調函數(shù)來過濾數(shù)組中的元素,它的原型如下:array array_filter ( array $input , callback $callback )參數(shù)input即為要進行過濾的數(shù)組;參數(shù)callback即為進行過濾的函數(shù),如果回調函數(shù)返回TRUE,則input數(shù)組的當前值會被包含在返回的結果數(shù)組中,數(shù)組的鍵名保留不變。注意:在使用array_filter函數(shù)過濾數(shù)組元素的時候不可增加或

22、者刪除數(shù)組的元素,否則會得到不可預料的結果。325.4.2 過濾數(shù)組中的元素【示例5-20】演示使用array_filter函數(shù)過濾數(shù)組。當然array_filter函數(shù)不只能用來做上面的事情,例如還可以使用該函數(shù)將數(shù)組中的整數(shù)過濾出來。【示例5-21】演示使用array_filter函數(shù)過濾數(shù)組中的非整數(shù)元素。從運行結果可以看到,使用array_filter函數(shù)成功過濾了數(shù)組中的非整數(shù)的元素。我們還可以過濾掉非字符的元素,這里就留給讀者去實踐。335.5 關聯(lián)數(shù)組我們知道PHP的數(shù)組索引也是可以自定義的,它允許的類型為整型和字符串形,這種使用自定義鍵名的數(shù)組就稱為關聯(lián)數(shù)組。關聯(lián)數(shù)組的極大多數(shù)

23、使用方法同索引數(shù)組是相同的,因此本節(jié)主要講解定義關聯(lián)數(shù)組、數(shù)組的比較運算符和遍歷數(shù)組的其他一些方式。345.5.1 定義關聯(lián)數(shù)組定義關聯(lián)數(shù)組即為數(shù)組顯式地指定索引名,指定的方式非常簡單,通常的形式如下:array(索引=值)索引數(shù)組中同樣可以有不顯式指定索引的元素,被省略的索引按照索引數(shù)組的指定規(guī)則進行指定,我們可以通過一個示例來演示?!臼纠?-22】演示關聯(lián)數(shù)組的定義方式和索引值的指定規(guī)則。在本示例中,需要讀者注意的就是數(shù)組的索引值的變化規(guī)律,還有就是數(shù)組元素的個數(shù)并不會因為數(shù)組指定了21作為索引而使得數(shù)組的長度變?yōu)?1。355.5.2 數(shù)組比較運算符PHP中提供了專門用于對數(shù)組進行比較的運

24、算符,如表所示。運算符名稱作用=相等如果兩個數(shù)組具有相同的索引/值則為TRUE=全等如果兩個數(shù)組具有相同的索引/值對并且順序和類型都相同則為TRUE!=不等如果兩個數(shù)組不相等則為TRUE不等作用與!=相同!=不全等如果兩個數(shù)組不全等則為TRUE365.5.2 數(shù)組比較運算符表中的相等(=)和全等(=)運算符,這兩個運算符的區(qū)別就在于元素的順序以及元素的類型。如下所示的兩個數(shù)組:$arra=array(hello,hi)$arrb=array(1=hi,0=hello)數(shù)組$arra與數(shù)組$arrb相等但不全等,不全等是因為他們的索引/值順序不同。再來看兩個數(shù)組:$arrc=array(1,2)

25、$arrd=array(1,2);數(shù)組$arrc與數(shù)組$arrd同樣相等但不全等,不全等是因為元素的類型不同。不等和不全等運算符的使用方法正好和他們相反,這里就不再贅述。375.5.2 數(shù)組比較運算符【示例5-23】演示數(shù)組比較運算符的使用。讀者可以從運行結果中對照比較各個數(shù)組以理解這些數(shù)組運算符。385.5.3 使用foreach結構遍歷數(shù)組前面我們已經(jīng)使用for循環(huán)遍歷過索引數(shù)組。我們知道關聯(lián)數(shù)組的索引值通常是自定義的,因此通常不能通過for循環(huán)來遍歷。foreach是PHP中專門用來遍歷數(shù)組的結構,它有兩種使用形式,如下所示:foreach (array_expression as $v

26、alue) statementforeach (array_expression as $key = $value)statement第一種形式中的參數(shù)array_expression表示要進行遍歷的數(shù)組;參數(shù)$value用來接收當前元素的值。第二種形式是第一種形式的補充,除了使用參數(shù)$value來接收當前元素的值外,還使用參數(shù)$key來接收當前元素的鍵值。foreach結構的工作原理是每次循環(huán)都會訪問下一個數(shù)組元素。395.5.3 使用foreach結構遍歷數(shù)組數(shù)組指針是數(shù)組內(nèi)部特有的指針,它初始會指向數(shù)組的第一個元素,可以通過數(shù)組指針操作函數(shù)來對指針進行操作。由于foreach控制的是數(shù)組

27、的指針,因此可以遍歷任意數(shù)組。405.5.3 使用foreach結構遍歷數(shù)組【示例5-24】演示使用foreach循環(huán)遍歷數(shù)組。從運行結果我們可以看到,使用foreach可以輕松完成遍歷一個索引數(shù)組。當然foreach不止可以用來輸出數(shù)組元素,下面我們就來演示使用foreach修改數(shù)組中元素的值。由于foreach默認是使用傳值賦值,因此我們可以以引用的形式來訪問元素并修改其值?!臼纠?-25】演示使用foreach修改數(shù)組元素的值。從運行結果我們可以看到,使用foreach成功修改了原數(shù)組的元素值。415.5.4 使用指針控制函數(shù)遍歷數(shù)組foreach結構就是通過控制數(shù)組指針來遍歷一個數(shù)組的

28、。除此之外,PHP中專門提供了多個指針控制函數(shù),使用指針控制函數(shù)可以更加靈活地對數(shù)組進行操作。我們首先來介紹這些控制函數(shù),然后再使用這些函數(shù)進行遍歷數(shù)組以及進行其他的操作。421.each()和list()each函數(shù)返回數(shù)組中當前的索引/值對并將數(shù)組指針向前移動一步,該函數(shù)的形式如下:array each ( array &$array )該函數(shù)會返回一個含有四個元素的數(shù)組,形式如下所示:Array ( 1 =值 value =值 0 = 索引 key = 索引)該函數(shù)當數(shù)組指針移出數(shù)組時會返回FALSE。431.each()和list()【示例5-26】演示使用each函數(shù)輸出數(shù)組元素的索

29、引/值對。以上代碼之所以可以通過一個簡單的循環(huán)來輸出對應元素的索引/值對,是由于每次調用each函數(shù)均會向前移動指針。441.each()和list()list函數(shù)用來把數(shù)組中的值賦給一些變量array list ( mixed $varname , mixed $. )函數(shù)中的參數(shù)varname用來接收數(shù)組對應的元素而且只能接收鍵為數(shù)字的元素即list的第一個參數(shù)會接收數(shù)組中最小鍵值對應的值。451.each()和list()【示例5-27】演示使用list函數(shù)接收each函數(shù)返回的數(shù)組。運行結果中輸出的是數(shù)組$arr的第一個元素的索引/值對。因此我們就可以通過循環(huán)來依次輸出數(shù)組的鍵值對?!?/p>

30、示例5-28】演示使用while循環(huán)聯(lián)合list和each函數(shù)遍歷數(shù)組。從運行結果我們可以看到成功遍歷輸出了數(shù)組的索引/值對,當然也可以使用for循環(huán)來遍歷,這里就不再詳細講解,讀者可以自己嘗試。462.數(shù)組指針控制函數(shù)PHP中提供了多個指針控制函數(shù),下面就分別介紹這些函數(shù):current():返回當前數(shù)組指針指向的元素,如果數(shù)組指針指向超出了單元列表的末端則返回FALSE,它的原型如下:mixed current ( array &$array )end():將數(shù)組的內(nèi)部指針指向最后一個元素并返回其值,它的原型如下:mixed end ( array &$array )next():將數(shù)組中

31、的內(nèi)部指針向前移動一位并返回其值,當沒有更多單元時返回FALSE,它的原型如下:mixed next ( array &$array )prev():將數(shù)組的內(nèi)部指針倒回一位并返回其值,當沒有更多單元時返回FALSE,它的原型如下:mixed prev ( array &$array )reset():將數(shù)組的內(nèi)部指針指向第一個元素并返回其值,如果數(shù)組為空則返回FALSE,它的原型如下:mixed reset ( array &$array )這些數(shù)組指針控制函數(shù)的加入,使得PHP的數(shù)組使用可以極為靈活。我們可以通過使用指針控制函數(shù)很方便地訪問任何數(shù)字的任何元素。472.數(shù)組指針控制函數(shù)【示例

32、5-29】演示使用自定義函數(shù)訪問數(shù)組的元素。上面的代碼演示了使用next函數(shù)向前移動數(shù)組指針來輸出數(shù)組元素的值,我們還可以通過擴展自定義函數(shù)來使用prev函數(shù)向后移動指針來返回數(shù)組元素的值?!臼纠?-30】演示通過擴展示例5-29中的自定義函數(shù)獲得更多的功能。以上的代碼中的自定義函數(shù)通過接受整數(shù)和負數(shù)參數(shù)實現(xiàn)了從數(shù)組的正向和反向來輸出數(shù)組元素。這里只簡單展現(xiàn)了數(shù)組控制指針的靈活之處,讀者可以通過自己擴展函數(shù)來獲得更加靈活的功能。485.6 多維數(shù)組我們知道PHP中的數(shù)組可以存儲多種類型的數(shù)據(jù),其中就包括數(shù)組。本節(jié)我們將要講解的是數(shù)組作為數(shù)組元素的形式,這種形式的數(shù)組被稱為多維數(shù)組。常用的多維數(shù)

33、組是二維數(shù)組和三維數(shù)組,我們將主要介紹二維數(shù)組。495.6.1 二維數(shù)組的優(yōu)勢我們知道一個學生有多個科目的成績,那么我們就可以用如下的形式來保存一個班里多個學生的成績:$stu01=array(76,87,68,98);$stu02=array(65,89,95,76);$stu03=array(90,80,66,60);$stun=array(90,95,65,100);我們可以想到如果一個班級有50個學生的話,我們就需要聲明50個變量來存儲他們的成績,這就類似于本章開頭的例子。那么自然就可以想到我們同樣可以使用數(shù)組來保存這些數(shù)據(jù),只不過這個數(shù)組的元素也是一些數(shù)組而已,我們可以改寫為如下的形

34、式:$stu=array(array(76,87,68,98),array(65,89,95,76),array(90,80,66,60),array(90,95,65,100);從上面的形式我們可以看到,省去了多個變量的聲明,而且訪問其中的成績也與一維數(shù)組無異。505.6.2 訪問二維數(shù)組的元素訪問二維數(shù)組的元素同樣使用如下的形式:數(shù)組名索引使用上面的形式訪問到的通常會是一個數(shù)組。515.6.2 訪問二維數(shù)組的元素【示例5-31】演示訪問二維數(shù)組的元素。從運行結果我們可以看到,代碼成功訪問到了數(shù)組中的元素,并輸出其信息。525.6.2 訪問二維數(shù)組的元素由于使用“數(shù)組名索引”形式訪問到的是一

35、個數(shù)組,因此我們可以將其作為數(shù)組名來訪問其中的元素,形式如下:數(shù)組名索引索引535.6.2 訪問二維數(shù)組的元素【示例5-32】以下代碼演示訪問二維數(shù)組中數(shù)組的元素。從運行結果中我們可以看到,使用“數(shù)組名索引索引”的形式正確訪問到了指定的數(shù)組元素,這也是二維數(shù)組的重點知識。二維數(shù)組同樣可以為關聯(lián)數(shù)組即可以自定義索引名,這里就不做講解。545.6.3 遍歷二維數(shù)組二維數(shù)組通常使用foreach來遍歷,對于規(guī)則的二維數(shù)組,也就是說數(shù)組的元素均為數(shù)組的二維數(shù)組,通常的形式如下:array(array(),array(),array(),array)這種形式的二維數(shù)組我們可以通過使用foreach嵌套來實現(xiàn)遍歷數(shù)組元素。555.6.3 遍歷二維數(shù)組【示例5-33】以下代碼演示使用foreach嵌套來遍歷二維數(shù)組。從運行結果我們可以看出,我們遍歷輸出了數(shù)組的所有元素。但是這段代碼不能用來遍歷一個不規(guī)則的二維數(shù)組即數(shù)組中有的元素不為數(shù)組的二維數(shù)組,通常的形式如下:array(array(),$value,array()如果要遍歷這種二維數(shù)組可以在foreach中添加判斷來遍歷,也可以通過遞歸來遍歷,這里我們只介紹使用遞歸的方式。565.6.3 遍歷二維數(shù)組

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論