玩轉(zhuǎn)PHP關(guān)聯(lián)數(shù)組的10個(gè)技巧
原創(chuàng)【51CTO譯文】關(guān)聯(lián)數(shù)組是描述一組鍵及其關(guān)聯(lián)值時(shí)經(jīng)常使用的一種數(shù)據(jù)類型,可以說(shuō)它是所有編程語(yǔ)言的支柱,當(dāng)然,PHP也不例外,實(shí)際上,關(guān)聯(lián)數(shù)組對(duì)Web開發(fā)任務(wù)來(lái)說(shuō)是非常重要的,PHP支持多種操作關(guān)聯(lián)數(shù)組的方法,對(duì)開發(fā)人員來(lái)說(shuō),要從中找出最有效,最合適自己所開發(fā)程序的方法來(lái)操縱這些數(shù)組。
這篇文章將介紹10個(gè)操作PHP關(guān)聯(lián)數(shù)組的技巧,熟練運(yùn)用能幫助你提高開發(fā)效率。
1、添加數(shù)組元素
PHP是一種弱類型語(yǔ)言,這意味著你不需要顯示聲明一個(gè)數(shù)組及其大小,相反,你可以同時(shí)聲明并填充數(shù)組。
- $capitals = array(
- 'Alabama' => 'Montgomery',
- 'Alaska' => 'Juneau',
- 'Arizona' => 'Phoenix'
- );
額外的數(shù)組元素可以象下面這樣追加:
- $capitals['Arkansas'] = 'Little Rock';
如果你正在處理數(shù)字索引數(shù)組,你可能想使用顯示命名的函數(shù)前置和追加元素,如array_push()和array_unshift()函數(shù),但這些函數(shù)不能操作關(guān)聯(lián)數(shù)組。
2、刪除數(shù)組元素
如果要從數(shù)組中刪除一個(gè)元素,請(qǐng)使用unset()函數(shù),如:
- unset($capitals['California']);
使用數(shù)字索引數(shù)組時(shí),刪除數(shù)組元素的辦法更多,更靈活,可以使用array_shift()和array_pop()函數(shù)分別從數(shù)組的開頭和末尾刪除一個(gè)元素。
3、交換鍵和值
假設(shè)你想創(chuàng)建一個(gè)名叫$states的新數(shù)組,使用州府作為索引,使用州名作為關(guān)聯(lián)值,使用array_flip()函數(shù)很容易完成這個(gè)任務(wù)。
- $capitals = array(
- 'Alabama' => 'Montgomery',
- 'Alaska' => 'Juneau',
- 'Arizona' => 'Phoenix'
- );
- $states = array_flip($capitals);
- // $states = array(
- // 'Montgomery' => string 'Alabama',
- // 'Juneau' => string 'Alaska',
- // 'Phoenix' => string 'Arizona'
- // );
4、合并數(shù)組
假設(shè)前面的數(shù)組由一個(gè)基于Web的“FlashCard”服務(wù)使用,你想提供一種方法測(cè)試學(xué)生對(duì)美國(guó)各州***的掌握情況,你可以使用array_merge()函數(shù)合并包含州和***的數(shù)組。
- $stateCapitals = array(
- 'Alabama' => 'Montgomery',
- 'Alaska' => 'Juneau',
- 'Arizona' => 'Phoenix'
- );
- $countryCapitals = array (
- 'Australia' => 'Canberra',
- 'Austria' => 'Vienna',
- 'Algeria' => 'Algiers'
- );
- $capitals = array_merge($stateCapitals, $countryCapitals);
5、編輯數(shù)組值
假設(shè)在數(shù)組中的數(shù)據(jù)包含大小寫錯(cuò)誤,在插入到數(shù)據(jù)庫(kù)之前,你想糾正這些錯(cuò)誤,你可以使用array_map()函數(shù)給每個(gè)數(shù)組元素應(yīng)用一個(gè)回調(diào)。
- function capitalize($element)
- {
- $element = strtolower($element);
- return ucwords($element);
- }
- $capitals = array(
- 'Alabama' => 'montGoMEry',
- 'Alaska' => 'Juneau',
- 'Arizona' => 'phoeniX'
- );
- $capitals = array_map("capitalize", $capitals);
#p#
6、按鍵對(duì)數(shù)組排序
FlashCard程序常常使用各種排序,如按字母順序排序,你可以使用ksort()函數(shù)按鍵對(duì)關(guān)聯(lián)數(shù)組進(jìn)行排序。
- $capitals = array(
- 'Arizona' => 'Phoenix',
- 'Alaska' => 'Juneau',
- 'Alabama' => 'Montgomery'
- );
- ksort($capitals);
因?yàn)閿?shù)組是通過(guò)參數(shù)傳遞給ksort()函數(shù)的,意味著你不再需要將排序結(jié)果分配給另一個(gè)變量。
7、隨機(jī)數(shù)組排序
在FlashCard程序中還涉及到另一種隨機(jī)排序技術(shù),這時(shí)你要使用shuffle()函數(shù)實(shí)現(xiàn)數(shù)組項(xiàng)目的隨機(jī)排序。
- $capitals = array(
- 'Arizona' => 'Phoenix',
- 'Alaska' => 'Juneau',
- 'Alabama' => 'Montgomery'
- );
- shuffle($capitals);
如果不需要打亂數(shù)組順序,你只是想隨機(jī)選擇一個(gè)值,那么使用array_rand()函數(shù)即可。
8、確定鍵和值是否存在
你可以使用in_array()函數(shù)確定一個(gè)數(shù)組元素是否存在。
- $capitals = array(
- 'Arizona' => 'Phoenix',
- 'Alaska' => 'Juneau',
- 'Alabama' => 'Montgomery'
- );
- if (in_array("Juneau", $capitals))
- {
- echo "Exists!";
- } else {
- echo "Does not exist!";
- }
很少有人知道這個(gè)函數(shù)也可以確定一個(gè)數(shù)組鍵是否存在,在這一點(diǎn)上,它和array_key_exists()函數(shù)的功能一樣。
- $capitals = array(
- 'Arizona' => 'Phoenix',
- 'Alaska' => 'Juneau',
- 'Alabama' => 'Montgomery'
- );
- if (array_key_exists("Alaska", $capitals))
- {
- echo "Key exists!";
- } else {
- echo "Key does not exist!";
- }
9、搜索數(shù)組
你可能想搜索數(shù)組資源,這樣用戶就可以方便地用一個(gè)特定的州府檢索關(guān)聯(lián)的州,可以通過(guò)array_search()函數(shù)實(shí)現(xiàn)數(shù)組搜索。
- $capitals = array(
- 'Arizona' => 'Phoenix',
- 'Alaska' => 'Juneau',
- 'Alabama' => 'Montgomery'
- );
- $state = array_search('Juneau', $capitals);
- // $state = 'Alaska'
10、標(biāo)準(zhǔn)PHP庫(kù)
標(biāo)準(zhǔn)PHP庫(kù)(Standard PHP Library,SPL)為開發(fā)人員提供了許多數(shù)據(jù)結(jié)構(gòu),迭代器,接口,異常和其它以前PHP語(yǔ)言沒(méi)有的功能,使用這些功能可以通過(guò)面向?qū)ο蟮恼Z(yǔ)法遍歷數(shù)組。
- $capitals = array(
- 'Arizona' => 'Phoenix',
- 'Alaska' => 'Juneau',
- 'Alabama' => 'Montgomery'
- );
- $arrayObject = new ArrayObject($capitals);
- foreach ($arrayObject as $state => $capital)
- {
- printf("The capital of %s is %s<br />", $state, $capital);
- }
- // The capital of Arizona is Phoenix
- // The capital of Alaska is Juneau
- // The capital of Alabama is Montgomery
這僅僅是SPL眾多偉大功能中的一個(gè),一定要閱讀PHP文檔了解更多信息。
原文明:10 PHP Tricks for Associative Array Manipulation 黃永兵 譯
原文鏈接:http://www.phpbuilder.com/columns/associative-array-manipulation/Jason_Gilmore12092010.php3
【51CTO獨(dú)家譯文,轉(zhuǎn)載請(qǐng)表明出處及作者!】
【編輯推薦】