官术网_书友最值得收藏!

5章 PHP數組

視頻講解:1小時7分鐘

數組是對大量數據進行有效組織和管理的手段之一。通過數組,可以對大量性質相同的數據進行存儲、插入、排序及計算等操作,從而可以有效地提高程序開發效率及改善程序的編寫方式。PHP作為市面上最為流行的Web開發語言之一,憑借其代碼開源、升級速度快等特點,對數組的操作能力更加強大,尤其是PHP為程序開發人員提供了大量方便、易懂的數組操作函數,更使PHP深受廣大Web開發人員的青睞。

學習摘要:

數組的定義

創建數組

數組的類型

多維數組

遍歷數組

統計數組元素個數

查詢數組中指定元素

獲取數組中最后一個元素

向數組中添加元素

其他常用數組函數

5.1 什么是數組

視頻講解

數組,顧名思義,本質上就是一系列數據的組合。在這個組合中,每個數據都是獨立的,可以對每個單獨的數據進行分配和讀取,然而這一系列數據必須是同一種類型,不能屬于不同類型。在程序設計中引入數組可以更有效地管理和處理數據。我們可以單獨定義a、b、c、d、e這5個變量,也可以定義一個數組,包含這5個變量,如圖5.1所示。

圖5.1 變量和一維數組的概念圖

數組中的每個實體都包含兩項:鍵(也稱為下標)和值。可以通過鍵值來獲取相應數組元素。這就像籃球球員和球衣號碼一樣,如NBA芝加哥公牛隊喬丹球衣號碼是23號,那么,公牛隊就是一個數組,23就是數組的鍵,喬丹就是鍵對應的值。我們可以通過球衣號碼對應找到球員。例如,2017年NBA全明星西部首發陣容可以用數組表示,如圖5.2所示。

圖5.2 NBA全明星西部首發數組鍵值對

5.2 創建數組

視頻講解

在PHP中創建數組的方式主要有兩種:一種是應用array()函數創建數組,另一種是直接通過為數組元素賦值的方式創建數組。

5.2.1 使用array()函數創建數組

可以用array()函數來新建一個數組,該數組接受任意數量用逗號分隔的key(鍵)=>value(值)對,格式如下:

說明

鍵(key)可以是一個整數(integer)或字符串(string),如果省略了索引,則會自動產生從0開始的整數索引。如果索引是整數,則下一個產生的索引將是目前最大的整數索引+1。如果定義了兩個完全一樣的索引,則后面一個會覆蓋前一個。值(value)可以是任意類型的值,如果是數組類型時,就是二維數組。

應用array()函數聲明數組時,數組下標既可以是數值索引也可以是關聯索引。下標與數組元素值之間用“=>”進行連接,不同數組元素之間用逗號進行分隔。

應用array()函數定義數組比較靈活,可以在函數體中只給出數組元素值,而不必給出鍵名。例如:

運行結果如下:

注意

自PHP 5.4起可以使用短數組定義語法,用[]替代array(),如$array=[“asp”, “php”, “jsp”];。

在使用array()函數創建的數組中的數據時,可以直接利用它們在數組中的排列順序取值,這個順序稱為數組的下標。例如:

運行結果如下:

注意

使用這種方式定義數組時,下標默認從0開始,而不是1,然后依次增加1。所以下標為2的元素是指數組的第3個元素。

例如,下面將通過array()函數創建數組,代碼如下:

運行結果如下:

5.2.2 通過賦值方式創建數組

PHP中另一種比較靈活的數組創建方式是直接為數組元素賦值。如果在創建數組時不知道所創建數組的大小,或在實際編寫程序時數組的大小可能發生改變,采用這種數組創建的方法較好。

為了加深讀者對這種數組聲明方式的理解,下面通過具體實例對該種數組聲明方式進行講解,代碼如下:

運行結果如下:

注意

通過直接為數組元素賦值方式創建數組時,要求同一數組元素中的數組名相同,例子中都賦值給$array。

5.3 數組的類型

視頻講解

PHP支持兩種數組:索引數組(indexed array)和關聯數組(associative array),前者使用數字作為鍵,后者使用字符串作為鍵。

5.3.1 數字索引數組

PHP數字索引一般表示數組元素在數組中的位置,它由數字組成,數字索引數組默認索引值從數字0開始,不需要特別指定,PHP會自動為索引數組的鍵名賦一個整數值,然后從這個值開始自動增量,當然,也可以指定從某個位置開始保存數據。我們可以使用數字索引定義5.1節中的2017年NBA全明星西部首發數組,如圖5.3所示。

圖5.3 NBA全明星西部首發數組數字索引

例如,創建兩個數組$project1和$project2,具體代碼如下:

運行結果如下:

5.3.2 關聯數組

關聯數組(associative array)的鍵名可以是數值和字符串混合的形式,而不像數字索引數組的鍵名只能為數字,在一個數組中,只要鍵名中有一個不是數字,那么這個數組就稱為關聯數組。以水果名稱和價格的數組為例,鍵為水果名稱,值為水果價格,如圖5.4所示。

圖5.4 關聯數組示意圖

創建一個關聯數組,代碼如下:

運行結果如下:

多學兩招

關聯數組的鍵名可以是任何一個整數或字符串。如果鍵名是一個字符串,則不要忘了給這個鍵名或索引加上一個定界修飾符——單引號(')或雙引號(")。

5.4 多維數組

視頻講解

數組不一定就是一個鍵和值的簡單列表,數組中的每個位置還可以保存另一個數組。使用這種方法,可以創建一個二維數組。以某酒店的樓層和房間號為例,如圖5.5所示,每一個樓層都是一個一維數組,樓層數本身又構成了一個數組,這樣一間酒店就構成了一個二維數組。

圖5.5 二維表結構的樓層房間號

二維數組常用于表示表,表中的信息以行和列的形式表示,第一個下標代表元素所在的行,第二個下標代表元素所在的列。下面使用具體的實例來創建一個二維數組,代碼如下:

運行結果如圖5.6所示。

圖5.6 輸出二維數組運行結果

5.5 遍歷數組

視頻講解

遍歷數組中的所有元素是常用的一種操作,在遍歷的過程中可以完成查詢等功能。在生活中,如果想要去商場買一件衣服,就需要在商場中逛一遍,看是否有想要的衣服,逛商場的過程就相當于遍歷數組的操作。在PHP中遍歷數組的方法有多種,下面介紹最常用的foreach遍歷數組。

【例5.01】 通過foreach結構遍歷數組獲取數據信息,代碼如下:(實例位置:資源包\源碼\05\5.01)

運行結果如圖5.7所示。

圖5.7 foreach遍歷數組運行結果圖

在上面的代碼中,PHP為$url的每個元素依次執行循環體(echo語句)一次,將$link賦值給當前元素的值,其中$key為數組的鍵值。各元素按數組內部順序進行處理。

5.6 統計數組元素個數

視頻講解

在PHP中,使用count()函數對數組中的元素個數進行統計。語法格式如下:

參數及返回值說明如下。

array:必要參數。輸入的數組。

mode:可選參數。COUNT_RECURSIVE(或1),如選中此參數,本函數將遞歸地對數組計數。對計算多維數組的所有單元尤其有用。此參數的默認值為0。

返回值:返回array中的單元數量。

例如,使用count()函數統計數組元素的個數,代碼如下:

運行結果如下:

例如,使用count()函數遞歸地統計數組中圖書數量并輸出,代碼如下:

運行結果如下:

注意

在統計二維數組時,如果直接使用count()函數只會顯示一維數組的個數,所以參數設為COUNT_RECURSIVE(或1),對計算多維數組的所有單元尤其有用。

5.7 查詢數組中指定元素

視頻講解

array_search()函數可以在數組中搜索給定的值,找到后返回鍵名,否則返回false。語法格式如下:

參數及返回值說明如下。

needle:指定在數組中搜索的值。

haystack:指定被搜索的數組。

strict:為可選參數,默認值為false。如果值為true,還將在數組中檢查給定值的類型。

返回值:如果找到了needle則返回它的鍵,否則返回false。

【例5.02】 明日學院圖書效率排行榜中,排名前四位的PHP書籍分別是《零基礎學PHP》《PHP項目開發實戰入門》《PHP從入門到精通》《PHP開發實戰》,其對應的價格依次是69.80元、69.80元、62.90元、55.90元。使用array_search()函數查詢圖書《PHP從入門到精通》的價格。代碼如下:(實例位置:資源包\源碼\05\5.02)

上述代碼中,使用array_search()函數查詢$book_name變量在$book數組中的下標,根據該下標獲取$price價格數組中對應的值。運行結果如圖5.8所示。

圖5.8 查詢數組中元素的值

5.8 獲取數組中最后一個元素

視頻講解

通過函數array_pop()獲取數組中的最后一個元素。語法格式如下:

參數及返回值說明如下。

array:輸入的數組。

返回值:返回數組的最后一個單元,并將原數組的長度減1,如果數組為空(或者不是數組)將返回null。

例如,應用array_pop()函數獲取數組中的最后一個元素,代碼如下:

運行結果如下:

5.9 向數組中添加元素

視頻講解

通過array_push()函數向數組中添加元素。array_push()函數將數組當成一個棧,將傳入的變量壓入該數組的末尾,該數組的長度將增加入棧變量的數目,返回數組新的元素總數。語法格式如下:

參數及返回值說明如下。

array:指定的數組。

var:壓入數組中的值。

返回值:數組新的單元總數。

例如,應用array_push()函數向數組中添加元素,代碼如下:

運行結果如下:

5.10 其他常用數組函數

視頻講解

由于篇幅有限,本章不能將數組函數逐一介紹,在此列舉出其他常用數組函數,使讀者先簡單了解一下函數用途。在遇到問題需要使用時,可查找PHP手冊,查找相應函數的用法,實現自己的功能。

5.10.1 數組排序函數

常用的數組排序函數如表5.1所示。

表5.1 數組排序函數

【例5.03】 明日學院網站的社區中,有一個熱帖功能,即根據帖子的回復數量由多到少作為熱帖的排名順序。帖子數組如下所示:

實現根據reply_num由多到少進行排序的功能,代碼如下:(實例位置:資源包\源碼\05\5.03)

運行結果如圖5.9所示。

圖5.9 帖子排序運行結果

5.10.2 數組計算函數

常用的數組計算函數如表5.2所示。

表5.2 數組計算函數

【例5.04】 模擬淘寶多條件篩選商品的功能,根據手機品牌篩選出商品數組$brand,根據手機顏色篩選出商品數組$color。現選擇品牌為iPhone,顏色為“土豪金”的手機。使用array_intersect()函數實現該功能。代碼如下:(實例位置:資源包\源碼\05\5.04)

運行結果如圖5.10所示。

圖5.10 array_intersect()函數獲取交集

5.11 小結

本章的重點是數組的常用操作,這些操作在實際應用中經常使用。另外,PHP提供了大量的數組函數,完全可以在開發任務中輕松實現所需要的功能。希望通過本章的學習,讀者能夠舉一反三,對所學知識進行靈活運用,開發實用的PHP程序。

5.12 實戰

5.12.1 使用foreach遍歷課程列表

實例位置:資源包\源碼\05\實戰\01

在明日學院網站的課程分類中,有如下數組:

使用foreach嵌套foreach,輸出該課程列表,運行結果如圖5.11所示。

圖5.11 foreach循環嵌套

5.12.2 使用foreach生成標簽鏈接

實例位置:資源包\源碼\05\實戰\02

在博客首頁中,左側通常會有一個標簽欄。當用戶單擊相應的標簽后,頁面即跳轉到該標簽下文章列表頁。根據標簽數組,使用foreach生成標簽鏈接,如圖5.12所示。

圖5.12 遍歷標簽列表

5.12.3 使用array_unique()函數去除重復數據

實例位置:資源包\源碼\05\實戰\03

在明日學院網站的后臺,可以添加相應版塊的版主功能。每個版塊可以有多個版主,用“,”分隔版主名稱,如PHP版塊的版主有“張三,李四,王五,趙六,張三”。試著使用array_unique()函數去除重復的版主名稱。運行結果如圖5.13所示。

圖5.13 使用array_unique()函數去除重復數據

主站蜘蛛池模板: 舞阳县| 清涧县| 赤峰市| 勃利县| 长宁县| 墨竹工卡县| 高碑店市| 泰来县| 江门市| 团风县| 新蔡县| 田林县| 紫金县| 成都市| 苍南县| 上虞市| 黔东| 轮台县| 洛川县| 衡阳县| 响水县| 无极县| 红原县| 通化县| 紫阳县| 法库县| 咸阳市| 宜兴市| 克拉玛依市| 泰顺县| 那曲县| 万载县| 瓮安县| 都昌县| 康平县| 慈利县| 寻甸| 尚义县| 定远县| 长乐市| 鄢陵县|