目錄
- 一、數組的定義與分類
- 1.1 索引數組
- 1.2 關聯數組
- 1.3 多維數組
- 二、數組的基本操作
- 2.1 數組元素的添加、刪除、修改和訪問
- 2.2 數組指針的操作
- 三、數組處理函數
- 3.1 數組排序函數
- 3.2 數組統計函數
- 3.3 數組過濾與轉換函數
一、數組的定義與分類
在 PHP 中,數組是一種非常重要的數據結構,它允許我們在一個變量中存儲多個值,并且可以方便地對這些值進行管理和操作。數組可以分為索引數組、關聯數組和多維數組,下面我們來詳細了解它們的定義與分類。
1.1 索引數組
索引數組是使用數字索引來存儲值的數組,索引從 0 開始依次遞增。在 PHP 中,可以使用array()函數或者方括號[]來創建索引數組。例如:
// 使用array()函數創建索引數組
$fruits = array("蘋果", "香蕉", "橙子");// 使用方括號創建索引數組
$numbers = [1, 2, 3, 4, 5];
訪問索引數組中的元素時,只需使用對應的索引值即可。例如,要訪問$fruits數組中的第一個元素,可以這樣寫:
echo $fruits[0]; // 輸出:蘋果
也可以通過循環遍歷索引數組,例如使用for循環:
$fruits = array("蘋果", "香蕉", "橙子");
for ($i = 0; $i < count($fruits); $i++) {echo $fruits[$i]. "<br>";
}
或者使用foreach循環:
$fruits = array("蘋果", "香蕉", "橙子");
foreach ($fruits as $fruit) {echo $fruit. "<br>";
}
1.2 關聯數組
關聯數組與索引數組不同,它使用字符串作為索引(也稱為鍵),而不是數字。這使得我們可以通過有意義的鍵名來訪問數組中的值,提高了代碼的可讀性和維護性。在 PHP 中,定義關聯數組時使用=>符號來指定鍵值對。例如:
// 創建關聯數組
$person = array("name" => "張三","age" => 25,"city" => "北京"
);
訪問關聯數組中的元素時,使用對應的鍵名:
echo $person["name"]; // 輸出:張三
echo $person["age"]; // 輸出:25
同樣,也可以使用foreach循環遍歷關聯數組:
$person = array("name" => "張三","age" => 25,"city" => "北京"
);
foreach ($person as $key => $value) {echo $key. ": ". $value. "<br>";
}
1.3 多維數組
多維數組是指數組中包含其他數組作為元素的數組。這種結構可以用來表示更加復雜的數據,例如表格數據、樹狀結構等。最常見的多維數組是二維數組,它可以看作是一個由行和列組成的表格。例如,下面是一個二維數組,用于存儲學生的成績:
// 定義二維數組
$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);
在這個二維數組中,$scores[0]表示第一行的成績,$scores[0][0]表示第一行第一列的成績(即第一個學生的第一門課成績)。訪問多維數組中的元素時,需要使用多個索引值,例如:
echo $scores[1][2]; // 輸出:95,表示第二個學生的第三門課成績
對于多維數組的遍歷,可以使用多層循環。例如,遍歷上面的$scores數組:
$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);
for ($i = 0; $i < count($scores); $i++) {for ($j = 0; $j < count($scores[$i]); $j++) {echo $scores[$i][$j]. " ";}echo "<br>";
}
也可以使用foreach循環結合is_array()函數來遞歸地遍歷多維數組:
function printMultiArray($array) {foreach ($array as $value) {if (is_array($value)) {printMultiArray($value);} else {echo $value. " ";}}echo "<br>";
}$scores = array(array(85, 90, 78),array(92, 88, 95),array(76, 82, 89)
);
printMultiArray($scores);
通過上述介紹,我們對 PHP 中數組的定義與分類有了清晰的認識,這為后續學習數組的基本操作和處理函數打下了堅實的基礎。
二、數組的基本操作
在了解了數組的定義與分類后,接下來我們學習數組的基本操作,包括數組元素的添加、刪除、修改和訪問,以及數組指針的操作。這些操作是我們在使用數組時最常用的,熟練掌握它們可以讓我們更加靈活地處理數組數據。
2.1 數組元素的添加、刪除、修改和訪問
- 添加元素:
- 在 PHP 中,向數組添加元素有多種方法。對于索引數組,可以使用方括號[]直接添加元素,PHP 會自動為新元素分配一個合適的索引(通常是當前最大索引加 1)。例如:
$fruits = array("蘋果", "香蕉");
$fruits[] = "橙子";
print_r($fruits);
上述代碼中,我們先定義了一個包含 “蘋果” 和 “香蕉” 的$fruits數組,然后使用$fruits[] = “橙子”;向數組末尾添加了 “橙子” 這個元素,最后使用print_r()函數輸出數組內容,可以看到數組變為Array ( [0] => 蘋果 [1] => 香蕉 [2] => 橙子 )。
- 還可以使用array_push()函數向數組末尾添加一個或多個元素。array_push()函數的第一個參數是要操作的數組,后面的參數是要添加的元素。例如:
$fruits = array("蘋果", "香蕉");
array_push($fruits, "草莓", "葡萄");
print_r($fruits);
這里通過array_push()函數向$fruits數組中添加了 “草莓” 和 “葡萄” 兩個元素,輸出的數組為Array ( [0] => 蘋果 [1] => 香蕉 [2] => 草莓 [3] => 葡萄 )。
對于關聯數組,添加元素時需要指定鍵名,通過$數組名[鍵名] = 值;的方式來添加。例如:
$person = array("name" => "張三");
$person["age"] = 25;
$person["city"] = "北京";
print_r($person);
此代碼先定義了一個關聯數組$person,只有 “name” 這個鍵值對,然后依次添加了 “age” 和 “city” 鍵值對,最終輸出的數組為Array ( [name] => 張三 [age] => 25 [city] => 北京 )。
- 刪除元素:
使用unset()函數可以刪除數組中的元素。unset()函數接受一個或多個參數,每個參數是要刪除的數組元素的索引或鍵。例如,刪除索引數組中的元素:
$fruits = array("蘋果", "香蕉", "橙子");
unset($fruits[1]);
print_r($fruits);
這段代碼刪除了$fruits數組中索引為 1 的元素(即 “香蕉”),輸出的數組變為Array ( [0] => 蘋果 [2] => 橙子 ),需要注意的是,使用unset()函數刪除元素后,數組的索引不會自動重新排列。
對于關聯數組,同樣使用unset()函數根據鍵來刪除元素:
$person = array("name" => "張三", "age" => 25, "city" => "北京");
unset($person["age"]);
print_r($person);
這里刪除了$person數組中 “age” 這個鍵值對,輸出結果為Array ( [name] => 張三 [city] => 北京 )。
- 修改元素:
直接通過索引或鍵對數組元素進行賦值,就可以修改數組中的元素。對于索引數組:
$fruits = array("蘋果", "香蕉", "橙子");
$fruits[1] = "芒果";
print_r($fruits);
上述代碼將$fruits數組中索引為 1 的元素 “香蕉” 修改為 “芒果”,輸出數組為Array ( [0] => 蘋果 [1] => 芒果 [2] => 橙子 )。
對于關聯數組:
$person = array("name" => "張三", "age" => 25, "city" => "北京");
$person["age"] = 26;
print_r($person);
此代碼將$person數組中 “age” 對應的值從 25 修改為 26,輸出結果是Array ( [name] => 張三 [age] => 26 [city] => 北京 )。
- 訪問元素:
通過索引或鍵來訪問數組中的元素。對于索引數組,使用索引值即可訪問對應的元素,如$fruits[0]表示訪問$fruits數組中的第一個元素。對于關聯數組,使用鍵名來訪問元素,如$person[“name”]表示訪問$person數組中 “name” 對應的元素。
2.2 數組指針的操作
PHP 數組有一個內部指針,它指向數組中的某個元素,通過一些函數可以操作這個指針,從而實現對數組元素的遍歷等操作。常見的數組指針操作函數有current()、next()、prev()、end()和reset()等。
- current()函數:返回數組中當前指針指向的元素的值。例如:
$fruits = array("蘋果", "香蕉", "橙子");
echo current($fruits); // 輸出:蘋果
數組創建后,指針默認指向第一個元素,所以current($fruits)返回 “蘋果”。
- next()函數:將數組的內部指針向前移動一位,并返回移動后指針指向的元素的值。如果移動后指針超出了數組的范圍,則返回false。例如:
$fruits = array("蘋果", "香蕉", "橙子");
echo current($fruits). "<br>"; // 輸出:蘋果
echo next($fruits). "<br>"; // 輸出:香蕉
echo next($fruits). "<br>"; // 輸出:橙子
echo next($fruits); // 輸出:(bool)false
- prev()函數:與next()函數相反,將數組的內部指針向后移動一位,并返回移動后指針指向的元素的值。如果移動后指針超出了數組的范圍,則返回false。例如:
$fruits = array("蘋果", "香蕉", "橙子");
next($fruits);
next($fruits);
echo current($fruits). "<br>"; // 輸出:橙子
echo prev($fruits). "<br>"; // 輸出:香蕉
- end()函數:將數組的內部指針移動到最后一個元素,并返回最后一個元素的值。例如:
$fruits = array("蘋果", "香蕉", "橙子");
echo end($fruits); // 輸出:橙子
- reset()函數:將數組的內部指針重置到第一個元素,并返回第一個元素的值。在多次使用next()或prev()等函數移動指針后,如果想重新從數組開頭遍歷,可以使用reset()函數。例如:
$fruits = array("蘋果", "香蕉", "橙子");
next($fruits);
next($fruits);
echo current($fruits). "<br>"; // 輸出:橙子
reset($fruits);
echo current($fruits); // 輸出:蘋果
通過這些數組指針操作函數,我們可以靈活地遍歷數組,按照自己的需求對數組元素進行處理。
三、數組處理函數
在 PHP 中,提供了豐富的數組處理函數,這些函數可以幫助我們更高效地對數組進行各種操作。下面將介紹數組排序函數、數組統計函數以及數組過濾與轉換函數。
3.1 數組排序函數
PHP 提供了多個數組排序函數,每個函數都有其獨特的用途和特點。
- sort () 函數:用于對索引數組進行升序排序。排序后,數組的索引會重新從 0 開始依次遞增。例如:
$numbers = array(5, 2, 8, 1, 9);
sort($numbers);
print_r($numbers);
上述代碼中,$numbers數組初始包含 5 個元素,使用sort()函數排序后,輸出結果為Array ( [0] => 1 [1] => 2 [2] => 5 [3] => 8 [4] => 9 ) ,可以看到數組元素按照從小到大的順序排列,且索引重新分配。
- rsort () 函數:與sort()函數相反,用于對索引數組進行降序排序,排序后索引同樣會重新從 0 開始依次遞增。例如:
$numbers = array(5, 2, 8, 1, 9);
rsort($numbers);
print_r($numbers);
這里$numbers數組經過rsort()函數處理后,輸出結果為Array ( [0] => 9 [1] => 8 [2] => 5 [3] => 2 [4] => 1 ),數組元素按從大到小的順序排列,索引重新生成。
- asort () 函數:用于對關聯數組按照值進行升序排序,排序后鍵值對的關聯關系保持不變。例如:
$person = array("name" => "張三","age" => 25,"city" => "北京"
);
asort($person);
print_r($person);
運行這段代碼,$person數組會根據值進行升序排序,輸出結果為Array ( [age] => 25 [city] => 北京 [name] => 張三 ) ,可以看到鍵值對的對應關系依然存在,只是按照值的大小重新排列了順序。
- arsort () 函數:與asort()函數相反,對關聯數組按照值進行降序排序,同時保持鍵值對的關聯關系。例如:
$person = array("name" => "張三","age" => 25,"city" => "北京"
);
arsort($person);
print_r($person);
此時$person數組按值降序排序,輸出為Array ( [name] => 張三 [city] => 北京 [age] => 25 ) 。
- ksort () 函數:用于對關聯數組按照鍵進行升序排序,鍵值對的關聯關系在排序后保持不變。例如:
$person = array("name" => "張三","age" => 25,"city" => "北京"
);
ksort($person);
print_r($person);
運行結果為Array ( [age] => 25 [city] => 北京 [name] => 張三 ),數組按照鍵名的字母順序(升序)進行了排序。
- krsort () 函數:與ksort()函數相反,對關聯數組按照鍵進行降序排序,鍵值對的關聯關系保持不變。例如:
$person = array("name" => "張三","age" => 25,"city" => "北京"
);
krsort($person);
print_r($person);
輸出結果為Array ( [name] => 張三 [city] => 北京 [age] => 25 ),數組按照鍵名的字母順序(降序)進行了排序。
3.2 數組統計函數
PHP 中的數組統計函數可以幫助我們獲取數組的一些統計信息,如元素個數、最大值和最小值等。
- count () 函數:用于計算數組中的元素個數,對于多維數組,還可以通過設置參數來遞歸計算所有元素的總數。其基本語法為int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ),其中$array_or_countable是要計數的數組或實現了Countable接口的對象,$mode是可選參數,默認值COUNT_NORMAL表示只計算第一級元素,如果設置為COUNT_RECURSIVE,則遞歸計算所有元素。例如:
$fruits = array("蘋果", "香蕉", "橙子");
echo count($fruits); // 輸出:3
對于多維數組:
$nestedArray = array(array(1, 2, 3),array(4, 5),array(6)
);
echo count($nestedArray); // 輸出:3,只計算第一級元素個數
echo count($nestedArray, COUNT_RECURSIVE); // 輸出:6,遞歸計算所有元素個數
- max () 函數:返回數組中的最大值。例如:
$numbers = array(5, 2, 8, 1, 9);
echo max($numbers); // 輸出:9
如果數組中包含字符串類型的元素,max()函數會按照字符串的字典序進行比較。例如:
$strings = array("banana", "apple", "cherry");
echo max($strings); // 輸出:cherry
- min () 函數:與max()函數相反,返回數組中的最小值。例如:
$numbers = array(5, 2, 8, 1, 9);
echo min($numbers); // 輸出:1
同樣,對于包含字符串元素的數組,min()函數按字典序返回最小的字符串:
$strings = array("banana", "apple", "cherry");
echo min($strings); // 輸出:apple
3.3 數組過濾與轉換函數
- array_filter () 函數:使用回調函數過濾數組中的元素。該函數會將數組中的每個元素傳遞給回調函數,如果回調函數返回true,則該元素會被保留在結果數組中;如果返回false,則該元素會被過濾掉。其語法為array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )。例如,過濾出數組中的奇數:
$numbers = array(1, 2, 3, 4, 5);
function isOdd($number) {return $number % 2 == 1;
}
$filteredNumbers = array_filter($numbers, 'isOdd');
print_r($filteredNumbers);
上述代碼中,array_filter()函數使用isOdd回調函數對$numbers數組進行過濾,只有奇數元素被保留,輸出結果為Array ( [0] => 1 [2] => 3 [4] => 5 )。
- array_flip () 函數:用于交換數組中的鍵和值,即原來的鍵變為值,原來的值變為鍵。需要注意的是,如果數組中有重復的值,在交換后,后面的鍵會覆蓋前面的鍵,因為鍵在數組中必須是唯一的。例如:
$fruits = array("蘋果" => "red", "香蕉" => "yellow", "橙子" => "orange");
$flippedFruits = array_flip($fruits);
print_r($flippedFruits);
運行結果為Array ( [red] => 蘋果 [yellow] => 香蕉 [orange] => 橙子 ) ,實現了鍵值的交換。如果原數組中有重復值,比如:
$colors = array("apple" => "red", "cherry" => "red");
$flippedColors = array_flip($colors);
print_r($flippedColors);
輸出結果為Array ( [red] => cherry ),因為 “red” 值重復,后面的 “cherry” 鍵覆蓋了前面的 “apple” 鍵。