PHP數組處理函數舉例

在PHP中,存儲在數組中的值成爲數組元素,數組有一維數組和多維數組之分,每個數組元素的索引也稱爲關鍵字,訪問數組元素可以通過索引。數組處理函數舉例如下:

一.創建數組

1.使用array()函數創建數組:array array([$key=>]$value,...)

$key=>$value,定義了關鍵字的鍵名和值,自定義鍵名可以字符串或數字。如果省略鍵名,函數會自動產生從0開始的整數作爲鍵名。如果只對某個給出的值沒有指定鍵名,則鍵名取該值前面最大的整數鍵名+1後的值。

注意:①可以使用print_r()函數打印數組。print_r()函數語法:bool print_r(mixed expression [,bool return]).如果想捕捉print_r()的輸出,可使用return函數,此參數設爲true,print_r()將不打印結果,而是返回其輸出;

②如果數組定義了兩個完全一樣的鍵名,則後面一個會覆蓋前面一個;

③要使用數組中某個值,可以使用$array["鍵名"]的形式;

④可以使用count()和sizeof()函數獲取數組元素的個數。

2.使用變量創建數組

compact()函數可以把一個或多個變量,甚至數組,建立成數組元素,這些數組元素的鍵名就是變量的變量名,值是變量的值:array compact(mixed $varname [,mixed...])

每個$varname可以是一個包括變量名的字符串或者是一個包含變量名的數組。對每個參數,compact()在當前的符號表中查找該變量名並將它添加到輸出的數組中,變量名成爲鍵名,變量的內容成爲該鍵的值,任何沒有變量名與之對應的字符串都被忽略。

extract()函數可以將數組中的單元(鍵值)轉化爲變量。

3.使用兩個數組創建一個數組:array_combin()

array array_combin(array $key,array $values)

array_combin()函數用$key數組中的值作爲鍵名,用$values數組中的值作爲相應的值,最後返回一個新的數組。

4.建立指定範圍的數組:range()

array range(mixed $low,mixed $high [,number $step])

$low爲數組開始元素的值,$high爲數組結束元素的值。如果$low>$high,則序列將從$high到$low。$step是單元之間的步進值,$step應該爲正值,默認爲1。range()函數返回一個數組,數組元素的值就是從$low到$high之間的值。

5.還可以自動建立數組。

二.鍵值操作

1.檢查數組中是否存在某個鍵名和值可以使用array_key_exists()和in_array()函數,兩者都爲布爾型,存在則返回true,不存在則返回false。

isset()函數也可以用來檢查數組中的鍵名是否存在,但是如果檢查的鍵名對應的值爲NULL,isset()函數返回False,而array_key_exists()返回的是true。

2.array_search()函數也可以用於檢查數組中的值是否存在,當值存在時返回這個值得鍵名,若不存在則返回NULL。

3.key()函數可以取得數組當前單元的鍵名

next()函數返回數組下一個單元的值,並將數組中的內部指針向前移動一位,如果已經到了數組的末端,則返回FALSE,prev()函數是將數組中的內部指針向後移動一位。

end($array):表示將數組中的內部指針指向最後一個單元;

reset($array):表示將數組中的內部指針指向第一個單元,即重置數組的指針;

each($array):表示返回當前的鍵名和值,並向數組指針向下移動一位。

4.list()函數可以將數組中的值賦給制定的變量。list()函數從數組的第一個值開始依次將值賦給函數中對應的變量,如果變量個數小於數組中的元素個數,則只賦值數組中和變量相等個數的元素。list()函數僅能用於鍵名爲數組的數組並假定數字鍵名從0開始,如果鍵名不是連續的數字,則極有可能發生錯誤。

5.使用array_fill()和array_fill_keys()函數可以用給定的值填充數組的值和鍵名

array array_fill(int $start_index,int $num,mixed $value)

array_fill()函數用參數$value的值將一個數組從第$start_index個單元開始,填充$num個單元。$num必須是一個大於零的數值,否則PHP會發出一條警告。

array array_fill_keys(array $keys ,mixed $value)

array_fill_keys函數用給定的數組$keys中的值作爲鍵名,$value作爲值,並返回新數組。

6.array_filp()函數可以交換數組中的鍵名和值。

數組中的值必須可作爲合法的鍵名才能夠使用該函數進行交換,另外如果交換前數組中有相同的值,則相同的值轉換爲鍵名後,值保留最後一個。

7.array_keys()和array_values()可以取得數組中所有的鍵名和值,並保存到一個新的數組中。

8.array_splice()函數可以將數組中的一個或多個單元刪除並用其他值代替

array array_splice(array $input ,int $offset [,int $length[,array $replacement]])

array_splice()函數把$input數組中由$offset和$length指定的單元去掉,如果提供了$replacement參數,則用$replacement中的值替代被移除的單元,最後返回一個包含有被移除單元的數組。

$offset是指定的偏移量,如果$offset爲正,則從$input數組中該指定的偏移量開始移除。如果$offset爲負,則從$input末尾倒數該值指定的偏移量開始移除。

$length是指定刪除的單元數,如果省略$length,則移除數組中從$offset到結尾的所有部分。如果指定了$length並且爲正值,則移除$offset後$length個單元,如果指定了$length並且爲負值,則移除從$offset到數組末尾倒數$length個爲止的所有的單元。當給出了$replacement時要移除從$offset到數組末尾所有單元室,可以用count($input)作爲$length。

如果給出了$relpacement數組,則被移除的單元被此數組中的單元替代。如果指定的$offset和$length的組合結果不會移除任何值,則$replacement數組中的單元將被插入到$offset指定的位置。如果用來替換的值只有一個單元,那麼不需要給它加上"array",除非該單元本身就是一個數組。

9.array_unique()函數可以移除數組中重複的值,返回一個新的數組,並不會破壞原來的數組。

三.數組的遍歷和輸出

1.使用while循環訪問數組

while循環、list()和each()函數結合就可以實現對數組的遍歷。list()函數的作用是將數組中的值賦給變量,each()函數的作用是返回當前的健名和值,並將數組指針向下移動一位。

2.使用for循環訪問數組

使用for循環只能訪問鍵名是有序的整型的數組。

3.使用foreach循環訪問數組

foreach循環是一個專門用於遍歷數組的循環。

foreach (array_expression as $value)

    //代碼段

foreach(array_expression as $key=>$value)

    //代碼段

第一種格式遍歷給定的array_expression數組。每次循環中,當前單元的值被賦給變量$value並且數組內部的指針向前移一步(下一次循環將會得到下一個單元)。第二種格式做同樣的事,只是當前單元的鍵名也會在每次循環中被賦給變量$key。

四.數組的排序

1.升序

①sort()函數可以對已經定義的數組進行排序,使得數組單元按照數組值從低到高重新索引。

bool sort(array $array [,int $sort_flags])

如果排序成功,返回TRUE,否則返回FALSE。$array是要排序的數組,$sort_flags的值可以影響排序的行爲,$sort_flags可以取一下4個值。

SORT_REGULAR:正常比較單元,默認

SORT_NUMERIC:單元被作爲數字來比較

SORT_STRING:單元被作爲字符串來比較

SORT_LOCAL_STRING:根據當前的區域設置把單元當作字符串比較。

sort()函數不僅對數組進行排序,同時刪除了原來的鍵名,並重新分配自動索引的鍵名。

②asort()函數也可以對數組的值進行升序排序,使用asort()函數排序後的數組還保持鍵名和值之間的關聯。

③ksort()函數用於對數組的鍵名進行排序,排序後鍵名和值的關聯不改變。

2.反向

降序排序可使用rsort()、arsort()、krsort()函數。

rsort()函數按數組中的值降序排序,並將數組鍵名修改爲一維數字鍵名;arsort()函數將數組中的值按降序排序,不改變鍵名和值之間的關聯;krsort()函數將數組中的鍵名按降序排序。

3.對多維數組排序

array_multisort()函數可以一次對多個數組排序,或根據多維數組的一維或多維對多維數組進行排序。

bool array_multisort(array $ar1[,mixed $arg[,mixed $...[, array $...]]])

第一個參數必須是一個數組,接下來的每個參數可以是數組或者是下面列出的排序標誌。

排序順序標誌:

SORT_ASC:默認值,按照升序排序

SORT_DESC:按照降序順序排序

排序類型標誌:

SORT_REGULAR:默認值,按照通常方法比較

SORT_NUMERIC:按照數值比較

SORT_STRING:按照字符串比較

每個數組之後不能制定兩個同類的排序標誌,每個數組後面制定的排序標誌僅對該數組有效。

使用array_multisort()函數排序是字符串鍵名保持不變,但數字鍵名會被重新索引。當函數的參數是一個數組列表時,函數首先對數組列表中的第一個數組進行升序排序,下一個數組中值的順序按照對應的第一個數組的值的順序排列。

數組列表中所有數組的數組元素一定要相等,否則使用array_multisort()函數時會發出警告。

4.對數組重新排序

shuffle()函數作用是將數組用隨機的順序排列,並刪除原有的鍵名,建立自動索引。

array_reverse()函數是將一個數組單元按相反順序排序:array array_reverse(array $array [,bool $preserve_keys])如果$preserve_keys的值爲TRUE則保留原來的鍵名,爲FALSE則爲數組重新建立索引。

5.自然排序

natsort()函數實現了一個和人們通常對字母、數組、字符串進行排序的方法一樣的排序算法,並保持原有鍵/值的關聯。稱爲“自然排序”。natsort()函數對大小寫敏感,natcasesort()函數也是一個自然排序函數,但不區分大小寫

五.其他

1.合併數組

array_merge()函數可以將一個或多個數組合並,一個數組中的值福建在前一個數組的前面,返回作爲結果的數組。

array array_merge(array $array1[,array $array2[,array $...]])

如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。如果數組中包含數組鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引。

在多維數組合並時,array_merge()函數將一維以後的數組都當作一個單元返回。使用array_merge_recusive()函數可以在保持現有數組結構的情況下對數組進行合併。

2.數組的棧操作

棧是一種存儲數據的結構,特點是“後進先出”。

出棧操作實際上刪除了數組最後一個單元,使用array_pop()函數實現;

入棧操作就是將新單元添加到數組尾部,使用array_push()函數實現,語法格式爲:

int array_push(array $array,mixed $var[,mixed $...])

array_push()函數將數組$array當成一個棧,並將傳入的變量$var加到$array的末尾,$array的長度將根據入棧變量的數目而增加。

3.取得數組當前單元

current()函數能夠獲取數組內部指針指向的單元的值,但不移動數組的內部指針。

4.數組計算

使用count()、sizeof()函數可以計算數組中元素的個數,而是用array_count_values()函數可以計算數組中一個值出現的次數。語法格式:

array array_count_values(array $input)

array_count_values()函數返回一個數組,該數組用$input數組中的值作爲鍵名,該值在$input數組中出現的次數作爲值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章