PHP之數組函數

鍵值操作

  數組的每個元素都是由鍵值對組成,通過元素的鍵名來訪問對應的鍵值。關於鍵值操作有array_values()、array_keys()、in_array()、array_flip()和array_reverse()這5個常用函數

array_values

  array_values() 返回 input 數組中所有的值並給其建立數字索引

array array_values ( array $input )
<?php$array = array("size" => "XL", "color" => "gold");//Array ( [0] => XL [1] => gold )print_r(array_values($array));?>

array_keys

  array_keys() 返回 input 數組中的數字或者字符串的鍵名

array array_keys ( array $array [, mixed $search_value [, bool $strict = false ]] )

  如果指定了可選參數 search_value,則只返回該值的鍵名。否則 input 數組中的所有鍵名都會被返回

  如果指定了可選參數 strict,表示判斷在搜索的時候是否該使用嚴格的比較(===)

複製代碼

<?php$array = array(0 => 100, "color" => "red");//Array ( [0] => 0 [1] => color ) print_r(array_keys($array));$array = array("blue", "red", "green", "blue", "blue");// Array ( [0] => 0 [1] => 3 [2] => 4 ) print_r(array_keys($array, "blue"));$array = array("color" => array("blue", "red", "green"),
               "size"  => array("small", "medium", "large"));Array ( [0] => color [1] => size )print_r(array_keys($array));?>

複製代碼

in_array

  in_array — 檢查數組中是否存在某個值

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

  如果第三個參數 strict 的值爲 TRUE 則 in_array() 函數還會檢查 needle 的類型是否和 haystack 中的相同

複製代碼

<?php$os = array("Mac", "NT", "Irix", "Linux");if (in_array("Irix", $os)) {    //Got Irix
    echo "Got Irix";
}if (in_array("mac", $os)) {    echo "Got mac";
}?>

複製代碼

array_flip

  array_flip — 交換數組中的鍵和值,成功時返回交換後的數組,如果失敗返回 NULL

array array_flip ( array $trans )

  array_flip() 返回一個反轉後的 array,例如 trans 中的鍵名變成了值,而 trans 中的值成了鍵名

  如果同一個值出現了多次,則最後一個鍵名將作爲它的值,所有其它的都丟失了

  [注意]trans中的值需要能夠作爲合法的鍵名,例如需要是 integer 或者 string。如果值的類型不對將發出一個警告,並且有問題的鍵/值對將不會反轉

複製代碼

<?php$trans = array("a" => 1, "b" => 1, "c" => 2);$trans = array_flip($trans);//Array ( [1] => b [2] => c )print_r($trans);?>

複製代碼

array_reverse

  array_reverse — 返回一個單元順序相反的數組

array array_reverse ( array $array [, bool $preserve_keys = false ] )

  如果參數preserve_keys設置爲 TRUE 會保留數字的鍵。非數字的鍵則不受這個設置的影響,總是會被保留

複製代碼

<?php$input  = array("php", 4.0, array("green", "red"));$result = array_reverse($input);/*array (size=3)
  0 => 
    array (size=2)
      0 => string 'green' (length=5)
      1 => string 'red' (length=3)
  1 => float 4
  2 => string 'php' (length=3) */var_dump($result);$result_keyed = array_reverse($input, true);/*array (size=3)
  2 => 
    array (size=2)
      0 => string 'green' (length=5)
      1 => string 'red' (length=3)
  1 => float 4
  0 => string 'php' (length=3) */var_dump($result_keyed);?>

複製代碼

 

記數

count

  count — 計算數組中的單元數目或對象中的屬性個數

int count ( mixed $var [, int $mode = COUNT_NORMAL ] )

  如果可選的 mode 參數設爲 COUNT_RECURSIVE(或 1),count() 將遞歸地對數組計數。對計算多維數組的所有單元尤其有用。mode 的默認值是 0。count() 識別不了無限遞歸

複製代碼

<?php$a[0] = 1;$a[1] = 3;$a[2] = 5;$result = count($a);// $result == 3$b[0]  = 7;$b[5]  = 9;$b[10] = 11;$result = count($b);// $result == 3$result = count(null);// $result == 0$result = count(false);// $result == 1?>

複製代碼

複製代碼

<?php$food = array('fruits' => array('orange', 'banana', 'apple'),
              'veggie' => array('carrot', 'collard', 'pea'));echo count($food, COUNT_RECURSIVE); // output 8echo count($food); // output 2?>

複製代碼

array_count_values

  array_count_values — 統計數組中所有的值出現的次數

array array_count_values ( array $input )
<?php$array = array(1, "hello", 1, "world", "hello");//Array ( [1] => 2 [hello] => 2 [world] => 1 )print_r(array_count_values($array));?>

array_unique

  array_unique — 移除數組中重複的值

array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

  [注意]鍵名保留不變。array_unique() 先將值作爲字符串排序,然後對每個值只保留第一個遇到的鍵名,接着忽略所有後面的鍵名。這並不意味着在未排序的 array 中同一個值的第一個出現的鍵名會被保留

複製代碼

<?php$input = array("a" => "green", "red", "b" => "green", "blue", "red");$result = array_unique($input);//Array ( [a] => green [0] => red [1] => blue )print_r($result);?>

複製代碼

array_sum

  array_sum — 計算數組中所有值的和

  array_sum() 將數組中的所有值的和以整數或浮點數的結果返回

複製代碼

<?php$a = array(2, 4, 6, 8);//sum(a) = 20echo "sum(a) = " . array_sum($a) . "\n";$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);//sum(b) = 6.9echo "sum(b) = " . array_sum($b) . "\n";?>

複製代碼

 

回調函數

array_filter

  array_filter — 用回調函數過濾數組中的單元

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

  依次將 array 數組中的每個值傳遞到 callback 函數。如果 callback 函數返回 TRUE,則 input 數組的當前值會被包含在返回的結果數組中。數組的鍵名保留不變

  [注意]如果沒有提供 callback 函數, 將刪除 input 中所有等值爲 FALSE 的條目

<?php$entry = array(0 => 'foo',1 => false,2 => -1,3 => null,4 => '');//Array ( [0] => foo [2] => -1 )print_r(array_filter($entry));?>

複製代碼

<?phpfunction odd($var)
{    return($var & 1);
}function even($var)
{    return(!($var & 1));
}$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);$array2 = array(6, 7, 8, 9, 10, 11, 12);//Odd : Array ( [a] => 1 [c] => 3 [e] => 5 ) echo "Odd :\n";print_r(array_filter($array1, "odd"));//Even: Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 )echo "Even:\n";print_r(array_filter($array2, "even"));?>

複製代碼

array_walk

  array_walk — 使用用戶自定義函數對數組中的每個元素做回調處理

bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )

  將用戶自定義函數 funcname 應用到 array 數組中的每個單元。array_walk() 不會受到 array 內部數組指針的影響。array_walk() 會遍歷整個數組而不管指針的位置

  典型情況下 callback 接受兩個參數。array 參數的值作爲第一個,鍵名作爲第二個

  如果提供了可選參數 userdata,將被作爲第三個參數傳遞給 callback funcname

複製代碼

<?php$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");function test_alter(&$item1, $key, $prefix)
{    $item1 = "$prefix: $item1";
}function test_print($item2, $key)
{    echo "$key. $item2\n";
}//Before ...: d. lemon a. orange b. banana c. appleecho "Before ...:\n";array_walk($fruits, 'test_print');array_walk($fruits, 'test_alter', 'fruit');echo "... and after:\n";//... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: applearray_walk($fruits, 'test_print');?>

複製代碼

array_map

  array_map — 將回調函數作用到給定數組的單元上

array array_map ( callable $callback , array $arr1 [, array $... ] )

  array_map() 返回一個數組,該數組包含了 arr1 中的所有單元經過 callback 作用過之後的單元。callback 接受的參數數目應該和傳遞給 array_map() 函數的數組數目一致

複製代碼

<?phpfunction cube($n)
{    return($n * $n * $n);
}$a = array(1, 2, 3, 4, 5);$b = array_map("cube", $a);//Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )print_r($b);?>

複製代碼

 

組合

array_slice

  array_slice — 從數組中取出一段

array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )

  array_slice() 返回根據 offset 和 length 參數所指定的 array 數組中的一段序列

  [注意]array_slice()默認會重新排序並重置數組的數字索引。可以通過將 preserve_keys 設爲 TRUE 來改變此行爲

複製代碼

<?php$input = array("a", "b", "c", "d", "e");// returns "c", "d", and "e"$output = array_slice($input, 2);  

// returns "d" $output = array_slice($input, -2, 1); 

// returns "a", "b", and "c"$output = array_slice($input, 0, 3); 

//Array ( [0] => c [1] => d )print_r(array_slice($input, 2, -1));//Array ( [2] => c [3] => d )print_r(array_slice($input, 2, -1, true));?>

複製代碼

array_splice

  array_splice — 把數組中的一部分去掉並用其它值取代,返回一個包含有被移除單元的數組,而原數組爲變化後的數組

array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement ]] )

  把 input 數組中由 offset 和 length 指定的單元去掉,如果提供了 replacement 參數,則用其中的單元取代

  [注意]input 中的數字鍵名不被保留

複製代碼

<?php$input = array("red", "green", "blue", "yellow");print_r(array_splice($input, 2));//Array ( [0] => blue [1] => yellow )print_r($input);//Array ( [0] => red [1] => green )$input = array("red", "green", "blue", "yellow");print_r(array_splice($input, -1, 1, array("black", "maroon")));// Array ( [0] => yellow )print_r($input);//Array ( [0] => red [1] => green [2] => blue [3] => black [4] => maroon )?>

複製代碼

array_combine

  array_combine — 創建一個數組,用一個數組的值作爲其鍵名,另一個數組的值作爲其值

array array_combine ( array $keys , array $values )

  [注意]如果作爲keys的數組和作爲values的數組的元素個數不一樣,將會拋出一個警告錯誤

複製代碼

<?php$a = array('green', 'red', 'yellow');$b = array('avocado', 'apple', 'banana');$c = array_combine($a, $b);//Array ( [green] => avocado [red] => apple [yellow] => banana )print_r($c);?>

複製代碼

array_merge

  array_merge — 合併一個或多個數組

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

  array_merge() 將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回作爲結果的數組

  如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面

  如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引

複製代碼

<?php$array1 = array("color" => "red", 2, 4);$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);$result = array_merge($array1, $array2);//Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )print_r($result);?>

複製代碼

【+】

  如果想完全保留原有數組並只想新的數組附加到後面,用 + 運算符

  [注意]如果輸入的數組中有相同的字符串鍵名,則該鍵名前面的值將覆蓋後面的值

複製代碼

<?php$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');$array2 = array(1 => 'one_a', 2 => 'three_a', 3 => 'four_a');$result = $array1 + $array2;//Array ( [0] => zero_a [2] => two_a [3] => three_a [1] => one_a )print_r($result);?>

複製代碼

array_intersect

  array_intersect — 計算數組的交集

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

  array_intersect() 返回一個數組,該數組包含了所有在 array1 中也同時出現在所有其它參數數組中的值

  [注意]鍵名保留不變

複製代碼

<?php$array1 = array("a" => "green", "red", "blue");$array2 = array("b" => "green", "yellow", "red");$result = array_intersect($array1, $array2);//Array ( [a] => green [0] => red )print_r($result);?>

複製代碼

array_diff

  array_diff — 計算數組的差集

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

  對比返回在 array1 中但是不在 array2 及任何其它參數數組中的值

複製代碼

<?php$array1 = array("a" => "green", "red", "blue", "red");$array2 = array("b" => "green", "yellow", "red");$result = array_diff($array1, $array2);//Array ( [1] => blue )print_r($result);?>

複製代碼

array_fill

  array_fill — 用給定的值填充數組,返回填充後的數組

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

  array_fill() 用 value 參數的值將一個數組填充 num 個條目,鍵名由 start_index 參數指定的開始

複製代碼

?php$a = array_fill(5, 6, 'banana');$b = array_fill(-2, 4, 'pear');//Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana )print_r($a);//Array ( [-2] => pear [0] => pear [1] => pear [2] => pear )print_r($b);?>

複製代碼

range

  range — 建立一個包含指定範圍單元的數組,返回的數組中從 start 到 limit 的單元,包括它們本身

array range ( mixed $start , mixed $limit [, number $step = 1 ] )

  如果給出了 step 的值,它將被作爲單元之間的步進值。step 應該爲正值。如果未指定,step 則默認爲 1

複製代碼

<?php// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)foreach (range(0, 12) as $number) {    echo $number;
}// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)foreach (range(0, 100, 10) as $number) {    echo $number;
}// array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');foreach (range('a', 'i') as $letter) {    echo $letter;
}// array('c', 'b', 'a');foreach (range('c', 'a') as $letter) {    echo $letter;
}?>

複製代碼

 

棧和隊列

array_pop

  array_pop — 將數組最後一個單元彈出(出棧)

mixed array_pop ( array &$array )

  array_pop() 彈出並返回 array 數組的最後一個單元,並將數組 array 的長度減一。如果 array 爲空(或者不是數組)將返回 NULL

複製代碼

<?php$stack = array("orange", "banana", "apple", "raspberry");$fruit = array_pop($stack);//Array ( [0] => orange [1] => banana [2] => apple )print_r($stack);?>

複製代碼

array_push

  array_push — 將一個或多個單元壓入數組的末尾(入棧),返回處理之後數組的元素個數

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

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

複製代碼

<?php$stack = array("orange", "banana");array_push($stack, "apple", "raspberry");//Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry )print_r($stack);?>

複製代碼

array_shift

  array_shift — 將數組開頭的單元移出數組

mixed array_shift ( array &$array )

  array_shift() 將 array 的第一個單元移出並作爲結果返回,將 array 的長度減一併將所有其它單元向前移動一位。所有的數字鍵名將改爲從零開始計數,文字鍵名將不變

複製代碼

<?php$stack = array("orange", "banana", "apple", "raspberry");$fruit = array_shift($stack);//Array ( [0] => banana [1] => apple [2] => raspberry )print_r($stack);?>

複製代碼

array_unshift

  array_unshift — 在數組開頭插入一個或多個單元,返回 array 數組新的單元數目

int array_unshift ( array &$array , mixed $var [, mixed $... ] )

  array_unshift() 將傳入的單元插入到 array 數組的開頭。注意單元是作爲整體被插入的,因此傳入單元將保持同樣的順序。所有的數值鍵名將修改爲從零開始重新計數,所有的文字鍵名保持不變

複製代碼

<?php$queue = array("orange", "banana");array_unshift($queue, "apple", "raspberry");//Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana )print_r($queue);?>

複製代碼

 

順序

array_rand

  array_rand — 從數組中隨機取出一個或多個單元,並返回隨機條目的一個或多個鍵

mixed array_rand ( array $input [, int $num_req = 1 ] )

  [注意]如果只取出一個,array_rand() 返回一個隨機單元的鍵名,否則就返回一個包含隨機鍵名的數組

複製代碼

<?php$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");$rand_keys = array_rand($input, 2);//Neo echo $input[$rand_keys[0]] . "\n";//Cypherecho $input[$rand_keys[1]] . "\n";?>

複製代碼

shuffle

  shuffle — 將數組打亂,成功時返回 TRUE, 或者在失敗時返回 FALSE

bool shuffle ( array &$array )

複製代碼

<?php$numbers = range(1, 20);shuffle($numbers);//20 11 19 4 7 13 16 8 12 1 9 6 15 3 2 18 10 14 17 5foreach ($numbers as $number) {    echo "$number ";
}?>


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