程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 前端學PHP之數組函數,php數組函數

前端學PHP之數組函數,php數組函數

編輯:關於PHP編程

前端學PHP之數組函數,php數組函數


×
目錄
[1]鍵值操作 [2]記數[3]回調函數[4]組合[5]棧和隊列[6]順序

前面的話

  PHP中的數組功能非常強大,數組處理函數有著強大、靈活、高效的特點。PHP5提供了近100個操作數組的系統函數,包括排序函數、替換函數、數組計算函數等。下面將詳細介紹數組函數

  [注意]關於javascript數組的22種方法移步至此

 

鍵值操作

  數組的每個元素都是由鍵值對組成,通過元素的鍵名來訪問對應的鍵值。關於鍵值操作有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 8
echo 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) = 20
echo "sum(a) = " . array_sum($a) . "\n";
$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
//sum(b) = 6.9
echo "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));
?>
<?php
function 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. apple
echo "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: apple
array_walk($fruits, 'test_print');
?>

array_map

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

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

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

<?php
function 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";
//Cypher
echo $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 5
foreach ($numbers as $number) {
    echo "$number ";
}
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved