1. 程式人生 > >PHP中的陣列處理函式

PHP中的陣列處理函式

php中陣列是一種非常重要的資料組織方式,關於陣列的處理函式也各式各樣,下面列舉一些常用的陣列處理函式。

foreach()

使用foreach函式來遍歷陣列,有兩種語法格式

1.
foreach(array_expression as $value){
    迴圈體 
}
2.
foreach(array_expression as $key=>$value){
    迴圈體 
}

第一種是遍歷給定的$array_expression 陣列,每次迴圈將當前元素的值賦值給$value,然後將陣列內部指標後移一步,第二種格式除了將元素值賦值給$value之外,還將當前元素對應的鍵名複製給變數$

key.

each()

each函式需要傳遞一個數組作為引數,每次返回當前該陣列讀取到的元素的鍵/值對,並向後移動陣列指標到下一個元素的位置。鍵/值對為四個帶有元素關聯和索引的陣列,如下:

<?php
    $contact = array("id"=>1, "姓名"=>"hello");
    $id = each($contact);
    print_r($id);
?>

在這裡print_r輸出的結果就是”id”=>1該元素對應的鍵/值對,為帶有四個元素的陣列:Array([1]=>1 [value]=>1 [0]=>id [key]=>id).此處的1和value對應的值相同,0和key對應的值相同,當each執行兩次之後,再次執行each時就會返回false。

list()

list函式用一步的操作給一組變數賦值,並且list僅能用於數字索引的陣列並假定數字索引是從0開始,用法如下:

<?php
    $info = array('coffee', 'bown','caffeine');
    list($drink, $color, $power) = $info;
?>

list將陣列中的元素依次賦值給list中的變數,也可如下使用:

list(, , $power) = $info;

array_values()

該函式引數為一個數組,返回值為陣列中所有元素的值形成的一個新的以數字索引的陣列,原陣列保持不變

array_keys()

該函式返回陣列中的所有的鍵名,該函式有一個必需引數和兩個可選引數,第一個必需引數為要查詢的陣列,第二個引數為是否制定鍵名對應的值進行查詢,第三個引數為查詢是否嚴格匹配型別,當只有第一個引數時,函式將所有的鍵名以數字索引構成新的陣列返回。當含有兩個引數時,函式將只返回值為指定值的鍵名,當含有三個引數時,函式將嚴格比較指定值與元素值,只有全等時才會返回。

in_array()

該函式是檢查陣列中是否存在某個值。該函式有三個引數,第一個引數是要搜尋的值,第二個引數是要進行查詢的陣列,若第一個引數為字串並且第三個引數為TRUE,則嚴格區分大小寫進行查詢,若第一個引數不是字串,並且第三個引數為TRUE則比較是回進行資料型別的比較,只有當資料型別相同並且值相同時才會返回true。array_search()與in_array()函式功能引數相同,也支援對資料型別的嚴格判斷。

array_key_exists()

檢查給定的鍵名或索引是否存在於陣列當中,由於陣列中的鍵名是唯一的所以不需要對型別進行比較。isset()具有相同的功能,也是對鍵名或者索引進行檢查,但isset()對於陣列中的NULL值不會返回TRUE了,而array_key_exists()會。

array_flip()

該函式交換陣列中的鍵和值,返回一個反轉之後的陣列,該函式只有個引數,為要進行反轉的陣列,若同一個值出現多次時將最後一個鍵名作為它的值,覆蓋前面出現的元素,原陣列中值的資料型別必須是字串或者整數,否則函式將報錯。

array_reverse()

將原陣列中的元素的順序進行反轉建立新的陣列並返回,函式有兩個引數,第一個引數為一個數組,第二個引數可選,若原陣列索引為預設數字索引且指定為true則元素的鍵名與值成對保持不變,否則鍵名將丟失,重新生成數字索引,如下兩種結果:

<?php
    $lamp = array("os", "linux", "webserver", "apache", "database", "mysql");
    print_r(array_reverse($lamp));
?>

執行結果為:

Array
(
    [0] => mysql
    [1] => database
    [2] => apache
    [3] => webserver
    [4] => linux
    [5] => os
)
<?php
    $lamp = array("os", "linux", "webserver", "apache", "database", "mysql");
    print_r(array_reverse($lamptrue));
?>

執行結果為:

Array
(
    [5] => mysql
    [4] => database
    [3] => apache
    [2] => webserver
    [1] => linux
    [0] => os
)

count()

該函式統計陣列中的元素數目以及唯一值的個數,對於陣列返回返回其中元素值的個數,對於其他值則返回1,若引數未定義或者引數為空值,該函式返回0。第一個引數是必需的,為一個數組或物件,第二個引數可選,判定是否遞迴的檢測陣列中陣列的元素個數,0為預設值,不檢測。

array_count_values()

該函式用於統計陣列中所有值出現的次數,引數輸入一個數組,返回一個數組,其元素的鍵名是原陣列的值,鍵值是該該值在原陣列中出現的次數。

array_unique()

該函式用於刪除陣列中重複的值,並返回沒有重複值的新陣列,引數需要接收一個數組,當陣列中幾個元素值相等時,只保留第一個元素,其他的元素被刪除,並且返回新陣列的鍵名不變(數字索引對應的鍵值同樣會保持不變,刪除之後,數字索引的鍵名會不連續。

array_filter()

該函式使用回撥函式過濾陣列中的元素,返回按照使用者自定義函式過濾後的新陣列,該函式有兩個引數,第一個引數為陣列,第二個引數為使用者自定義的過濾函式,使用者自定義函式的返回值只有true or false,以此用來判斷是否進行過濾,如果自定義函式返回true則進行保留該元素。如下例:

<?php
    $a = array(1, 2, 3, 4, 5, 6, 7, 8);
    function myFun($var){
        if($var%2 == 0){
            return true;
        }else{
            return false;
        }
    }

    print_r(array_filter($a, "myFun"));
?>

執行結果如下:

Array
(
    [1] => 2
    [3] => 4
    [5] => 6
    [7] => 8
)

該段程式碼是利用array_filter函式過濾陣列中的元素,過濾函式保留的是能夠被2整除的數。過濾之後得到的元素與其對應的數字索引保持不變。

array_walk()

該函式對陣列中的每個元素都會呼叫回撥函式進行處理,成功返回true,否則返回false。自定義函式有兩個必須引數,第一個引數接收傳入的元素的值,第二個引數接收傳入的元素的鍵名,第三個為可選引數,如果有定義第三個引數,第三個引數也會被自定義函式接收。如下例:

<?php
    $a = array(0, 1, 2, 3, 4, 5, 6, 7);
    function myFun($var, $key){
        if($var%2 == 0){
            echo "No.$key is two $var\n";
        }else{
            echo "No.$key is one $var\n";
        }
    }

    array_walk($a, "myFUn");
?>

執行結果:

No.0 is two 0
No.1 is one 1
No.2 is two 2
No.3 is one 3
No.4 is two 4
No.5 is one 5
No.6 is two 6
No.7 is one 7

這段程式碼使用array_walk函式將每個元素的值和鍵名傳入回撥函式進行處理判斷,並輸出結果。

array_map()

該函式呼叫回撥函式時一次性處理多個數組,在多個數組之間進行判斷。array_map()函式第一個引數為呼叫的回函數名稱,第二個引數為要進行處理的陣列,後面的陣列為可選引數。例項如下:

<?php
    $a = array(0, 1, 2, 3, 4, 5, 6, 7);
    $b = array(2, 3, 2, 3, 6, 7, 8, 7);
    function myFun($var, $var1){
        if($var == $var1){
            return "same";
        }else{
            return "different";
        }
    }

    print_r(array_map("myFun", $a, $b));
?>

執行結果如下:

Array
(
    [0] => different
    [1] => different
    [2] => same
    [3] => same
    [4] => different
    [5] => different
    [6] => different
    [7] => same
)

該函式執行的結果為兩個陣列進行比較之後的結果,返回值為一個數組,是兩個傳入的陣列元素一一進行比較之後得到的每個元素處理結果組成的陣列,若兩個陣列長度不相同,則會自動在短的陣列之後補空進行處理。