書名: PHP從入門到精通(微視頻精編版)作者名: 明日科技本章字數: 4096字更新時間: 2020-11-23 14:41:15
第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()函數去除重復數據
- Oracle WebLogic Server 12c:First Look
- Learning C# by Developing Games with Unity 2020
- Python科學計算(第2版)
- FLL+WRO樂高機器人競賽教程:機械、巡線與PID
- Python漫游數學王國:高等數學、線性代數、數理統計及運籌學
- Unity 5.x By Example
- jQuery Mobile移動應用開發實戰(第3版)
- 領域驅動設計:軟件核心復雜性應對之道(修訂版)
- Keras深度學習實戰
- 計算機應用基礎教程(Windows 7+Office 2010)
- Android應用開發深入學習實錄
- Angular應用程序開發指南
- AI自動化測試:技術原理、平臺搭建與工程實踐
- Python數據科學實踐指南
- 零基礎C語言學習筆記