本文檔整理自php學習手冊,在使用過程中發現數組函數大量使用,今天將它全部整理出來,便於以後查閱和使用。
語法 : array array([mixed ...]);
說明 :
傳回參數的數組,參數能以"=>"運算子來給予索引值,此函數不是正規的函數,主要是用來表示數組。
$arr=array(0=>123,2=>’tere’);
array_count_values --- 計算數組所有的值
語法 : array array_count_values(array input);
說明 :
此函數傳回一計算後之數組結果,傳回的數組其索引值為參數input的值,而數組的值則是參數input所出現的次數。
Example :
<?php
$array = array(1 , "hello" , 1 , "world" , "hello");
array_count_values($array); //returns array(1 => 2 , "hello" => 2 , "world" => 1)
?>
語法 : array array_diff (array array1, array array2 [, array ...])
說明 :
Array_diff( )傳回array1沒有出現在其它引數之中的所有的值,此函數傳回一數組型態,傳回的數組其索引值將保留。
Example :
<?php
$array1 = array ("a" => "green", "red", "blue");
$array2 = array ("b" => "green", "yellow", "red");
$result = array_diff ($array1, $array2);
?>
這將使$result有著array("blue")
語法 : array array_flip(array trans);
說明 : 此函數傳回翻轉(flip)順序的數組。
Example :
<?php
$trans = array_flip($trans);
$original = strtr($str , $trans);
?>
語法 : array array_intersect (array array1, array array2 [, array ...])
說明 :
Array_intersect( )傳回array1出現在所有引數之中的所有的值,此函數將傳回一數組型態,傳回的數組其索引值將保留。
Example :
<?php
$array1 = array ("a" => "green", "red", "blue");
$array2 = array ("b" => "green", "yellow", "red");
$result = array_intersect ($array1, $array2);
?>
這將使$result有著array( "a" => "green" , "red" )
語法 : array array_keys(array input [ , mixed search_value] );
說明 :
此函數從參數input傳回數字和字符串的索引值,參數search_value是非必需的,若有指定則只傳回所指定的值的索引值,否則將從input傳回所有的索引值。
Example :
<?php
$array = array(0 => 100, "color" => "red");
array_keys($array); // returns array(0, "color")
$array = array(1, 100, 2, 100);
array_keys($array, 100); // returns array(0, 2)
?>
語法 : array array_merge(array array1, array array2 [ , array ...] );
說明 :
此函數將兩個以上的數組合並在一起,如此一來它們的值則附加在先前的後面。若輸入的數組有著相同的字符串索引值,則後來的值會將覆蓋到之前的值,無論如何,數組有著相同的數字索引,但是隨後的值將不會覆蓋過原先的值,但是會被附加上。
Example :
<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid");
array_merge($array1, $array2);
?>
產生的數組將會是 array("color" => "green", 2, 4, "a", "b", "shape" => "trapezoid")
語法 : array array_merge_recursive (array array1, array array2 [, array ...])
說明 :
Array_merge_recursive( )將兩個以上的數組合並在一起,如此一來它們的值則附加在先前的後面。
如果輸入的數組有著相同的字符串索引值,則這些值會合並起來到數組中,而且是以遞歸的方式,如此一來假使值的本身是個數組,這個函數將會合並它在另一個數組之中。無論如何,數組有著相同的數字的索引,但是隨後的值將不會覆蓋過原先的值,但是會被附加上。
Example :
<?php
$ar1 = array ("color" => array ("favorite" => "red"), 5);
$ar2 = array (10, "color" => array ("favorite" => "green", "blue"));
$result = array_merge_recursive ($ar1, $ar2);
?>
產生的數組將會是
array( "color" => array ( "favorite" => array( "red" , "green" ), "blue" ),5 ,10)
語法 : bool array_multisort (array ar1 [,mixed arg [,mixed ...[,array...]]])
說明 :
Array_multisort( )能用來立刻將數個數組或多樣尺寸(multi-dimensional)數組排序。
輸入的數組被看作是表格(table)的欄位,依照列(rows)將它排序,這類似於SQL ORDER BY clause的功能,第一個數組是首要(primary)排序的數組,此數組中的列(值)以下一個輸入的數組對照相同的排序。
這個函數的引數結構是個獨特(unusual)位元,但是是可變通的。第一個引數必定是個數組,隨後的引數可以是個數組或是下個列表的排序旗標(flag)之一。
排序順序旗標 :
SORT_ASC - 排序成上升的順序
SORT_DESC - 排序成下降的順序
排序型態旗標 :
SORT_REGULAR - 正常的比較項目
SORT_NUMERIC - 以數字比較項目
SORT_STRING - 看作是字符串來比較項目
不能使用二個相同型態的旗標指定在各各數組之後,排序的旗標指定在數組引數的後面,只對此數組起作用,其它的將重設為預設的SORT_ASC和SORT_REGULAR在數組引數之後。
成功則傳回true,失敗則傳回false。
Example :
<?php
$ar1 = array ("10", 100, 100, "a");
$ar2 = array (1,3,"2",1);
array_multisort ($ar1,$ar2);
?>
此范例排序後,第一個數組將會是10 , "a" , 100 , 100,第二個數組將會是1 , 1 , 2 , "3"。
Example :
<?php
$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1));
array_multisort ($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
?>
在此范例排序後,第一個數組將會是10 , 100 , 100 , "a" (它被看作是字符串且上升排序),且第二個數組將會是1 , 3 , "2" , 1(它被看作是數值且下降排序)。
語法 : array array_pad(array input, int pad_size, mixed pad_value);
說明 :
此函數將數組array填塞成大小為pad_size和值為pad_value的數組,且將填塞後的數組傳回,若參數pad_size是一正數,則填塞在數組的右方,若為負數,則填塞在數組的左方。如果參數pad_size的絕對值小於或等於數組input的長度,則將不填塞。
Example :
<?php
$input = array(12, 10, 9);
$result = array_pad($input, 5, 0);
// result is array(12, 10, 9, 0, 0)
$result = array_pad($input, -7, -1);
// result is array(-1, -1, -1, -1, 12, 10, 9)
$result = array_pad($input, 2, "noop");
// not padded
?>
語法 : mixed array_pop(array array);
說明 : 此函數傳回數組array的最後一個元素,將數組array縮短一個元素。
Example :
<?php
$stack = array("orange", "apple", "raspberry");
$fruit = array_pop($stack);
?>
在此之後,$stack只有二個元素"orange"與"apple",且$fruit為"raspberry"。
語法 : int array_push(array array, mixed var [ , mixed ...] );
說明 :
此函數將參數array看做是一疊(stack),且延伸變量在參數array的末端之上,參數array的長度依照變量的數目而增加。
有著相同的效果是 :
<?php
$array[ ] = $var;
?>
重覆各個var。
傳回數組中元素的新數目。
Example :
<?php
$stack = array(1, 2);
array_push($stack, "+", 3);
?>
此范列將會使$stack有四個元素:1,2,"+"和3
語法 : mixed array_rand (array input [, int num_req])
說明 :
Array_rand( )當你想要隨機挑選數組的一個或多個值出來時相當有用,引數num_reg是非必需的,它指出你想要挑選出幾個值出來,如果沒有指定,則它的預設值是1。
如果你只挑選一個值,array_rand( )傳回隨機值的索引。否則,它傳回隨機值的索引放在數組中,將此數組傳回。如此一來你不但可以挑選隨機索引值而且可將數組的值輸出。
別忘了呼叫srand( )來設定亂數種子。
Example :
<?php
srand ((double) microtime() * 10000000);
$input = array ("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand ($input, 2);
print $input[$rand_keys[0]]."\n";
print $input[$rand_keys[1]]."\n";
?>
語法 : array array_reverse(array array);
說明 : 此函數將參數array的元素順序顛倒,且傳回新的數組。
Example :
<?php
$input = array("php", 4.0, array("green", "red"));
$result = array_reverse($input);
?>
此范列使$result成為array(array("green", "red"), 4.0, "php")。
語法 : mixed array_shift(array array);
說明 :
此函數移動數組array的第一個元素並將它傳回,將數組array縮短一個元素,並且全部向下移動。
Example :
<?php
$args = array("-v", "-f");
$opt = array_shift($args);
?>
此范例將會使$arge有一個元素"-f",且$opt有著"-v"。
語法 : array array_slice(array array, int offset, int [length] );
說明 :
此函數從數組array傳回元素的一部份,若offset為正數,則取回的部份將起始於數組中的offset處;若offset為負數,則從數組的末端開始。若length有給予且是正數,將會取回length個元素,若length是負數,則會停止於數組末端處第length個元素,若省略此參數,則傳回的部份將會從offset直到數組的末端。
Example :
<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // returns "c", "d", and "e"
$output = array_slice($input, 2, -1); // returns "c", "d"
$output = array_slice($input, -2, 1); // returns "d"
$output = array_slice($input, 0, 3); // returns "a", "b", and "c"
?>
語法 : array array_splice(array input, int offset, int [length] , array [replacement] );
說明 :
此函數將數組input從offset到length移除,若有提供參數replacement則以replacement的元素來替代。
若offset為正數則移除的起始處從數組array的開始處第offset的位置開始,若offset為負數則從數組array的末端開始。
若省略參數length則移除的部份是從offset到數組末端,若有指定length且是正數則移除length個元素,若有指定length且是負數則移除的部份將會止於數組的末端第length個元素。
若有指定參數replacement則移除的元素將會以此數組的元素來替代,若offset和length無移除,則replacement中的元素將會插入在offset所指定處。
以下的義意是相等的 :
array_push($input, $x, $y) array_splice($input, count($input), 0, array($x, $y))
array_pop($input) array_splice($input, -1)
array_shift($input) array_splice($input, 0, 1)
array_unshift($input, $x, $y) array_splice($input, 0, 0, array($x, $y))
$a[$x] = $y array_splice($input, $x, 1, $y)
Example :
<?php
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2); // $input is now array("red", "green")
array_splice($input, 1, -1); // $input is now array("red", "yellow")
array_splice($input, 1, count($input), "orange"); // $input is now array("red", "orange")
array_splice($input, -1, 1, array("black", "maroon"));
// $input is now array("red", "green", "blue", "black", "maroon")
?>
語法 : array array_unique (array array)
說明 :
Array_unique( )取輸入的數組array且傳回沒有相同的值的數組。索引會被保留(preserved)。
Example :
<?php
$input = array ("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique ($input);
?>
這將使$result有著array ( "a" => "green" , "red" , "blue");
語法 : int array_unshift(array array, mixed var, [...] );
說明 :
此函數增加元素到數組array的前面,此函數傳回數組array中新的元素數目。
Example :
<?php
$queue = array("p1", "p3");
array_unshift($queue, "p4", "p5", "p6");
?>
此范例將會使$queue有五個元素:"p4","p5","p6","p1"和"p3"。
語法 : array array_values(array input);
說明 :
此函數從數組array傳回所有的值。
Example :
<?php
$array = array("size" => "XL", "color" => "gold");
array_values($array); // returns array("XL", "gold")
?>
語法 : int array_walk(array arr , string func);
說明 :
使數組arr的每個元素和函數名稱func相對應,元素傳到函數func的第一個參數,如果函數func超過一個以上的參數,則會有警告訊息,要抑制警告訊息可在此函數前加上’@’,即@array_walk,或是使用error_reporting。
注意 : 此函數確實會將數組arr的每個元素依序代入,因此任何元素的改變都將影響數組本身。
注意 : PHP4.0.新增傳送索引(key)和使用者資料(userdata)到函數func。在PHP4中array_walk( )預設不重設(reset)數組,因此必須要呼叫reset( )
Example :
<?php
$fruits = array("d" => "lemon" , "a" => "orange" ,"b" => "banana" , "c" => "apple");
function test_alter($item1) {
$item1 = 'bogus';
}
function test_print($item2) {
echo "$item2<br>\n";
}
array_walk($fruits , 'test_print');
reset ($fruits);
array_walk($fruits , 'test_alter');
reset ($fruits);
array_walk($fruits , 'test_print');
?>
語法 : void arsort(array array);
說明 :
此函數顛倒數組元素的順序(z-a),且維持數組元素與其索引值對應的關系,這個函數主要是用於需要將數組元素的順序作顛倒的排列。
Example :
<?php
$fruits = array("d" => "lemon" , "a" => "orange" , "b" => "banana" , "c" => "apple");
arsort($fruits);
for(reset($fruits) ; $key = key($fruits) ; next($fruits)) {
echo "fruits[$key] = " .$fruits[$key]. "\n";
}
?>
此范例的結果為 :
fruits[a] = orange
fruits[d] = lemon
fruits[b] = banana
fruits[c] = apple
由此可見數組fruits已被顛倒了順序,而且索引值和元素之間的關系依然保持不變。
語法 : void asort(array array);
說明 :
此函數將數組的元素由a-z重新排列,且保持原先索引值和元素的對應關系,這個函數主要是用於需要將數組的元素重新排列。
Example :
<?php
$fruits = array("d" => "lemon" , "a" => "orange" , "b" => "banana" , "c" => "apple");
asort($fruits);
for(reset($fruits) ; $key = key($fruits) ; next($fruits)) {
echo "fruits[$key] = " .$fruits[$key]. "\n";
}
?>
此范例的結果為 :
fruits[c] = apple
fruits[b] = banana
fruits[d] = lemon
fruits[a] = orange
由此可見數組fruits已被重新排列,而且索引值和元素之間的關系依然保持不變。
語法 : array compact(string varname | array varnames, [...] );
說明 :
此函數取一變量參數的數目,各各變量可以是包含變量名稱的字符串或是變量的數組名稱,數組可以包含其它變量的數組名稱在裡面。
此函數在符號(symbol)表格中尋找變量名稱,並且將它增加到輸出數組,如此一來變量的名稱成為了索引值而變量的內容則成為了此索引值的值,此函數和extract( )相反,此函數傳回輸出數組。
Example :
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", $location_vars);
?>
在此之後,$result將會是array ("event" => "SIGGRAPH", "city" => "San Francisco", "state" => "CA")
語法 : int count(mixed var);
說明 :
傳回參數var中,元素的數目,最典型的例子就是用來計算數組中的元素數目。
如果變量沒有設定,則傳回 0,如果變量不是數組則傳回 1。
警告 :
變量沒有設定時count( )可能傳回 0,但是變量的開頭是空數組時,它也會傳回 0,可使用isset( )來測試。
語法 : mixed current(array array);
說明 :
每個數組都有內部指標指到它的現在元素,指標會指到最先插入數組中的元素,直到程式執行到有移動指標的函數,此函數會傳回內部指標所指到的數組元素,且不會移動指標的位置,若內部指標指到數組元素之外,則傳回false。如果數組包含空的元素(0或是"")則會傳回false。
語法 : array each(array array);
說明 :
從數組array傳回目前的key/value對,且向前移動數組游標(cursor)。傳回的數組有四個元素,分別是 0、1、key 和 value。元素 0 和 key 是數組索引值的名稱,1 和 value 則是元素的資料。若數組的內部指標指到數組的末端,此函數會傳回false。
Example :
<?php
$foo = array("bob" , "fred" , "jussi" , "jouni");
$bar = each($foo);
?>
$bar現在包含了以下key/value對:
0 => 0
1 => 'bob'
key => 0
value => 'bob'
<?php
$foo = array("Robert" => "Bob" , "Seppo" => "Sepi");
$bar = each($foo);
?>
$bar現在包含了以下key/value對:
0 => 'Robert'
1 => 'Bob'
key => 'Robert'
value => 'Bob'
each通常和list一起使用,例如:$HTTP_POST_VARS
Example :
<?php
echo "Values submitted via POST method:<br>";
while(list($key , $val) = each($HTTP_POST_VARS)) {
echo "$key => $val<br>";
}
?>
each( )執行之後,數組的游標(cursor)將會在數組的下一個元素的左側,若是到達數組的末端時,游標則在最後一個元素。
語法 : end(array array);
說明 :
此函數設定數組的內部指標到最後的元素
語法 : void extract(array var_array, int [extract_type] , string [prefix] );
說明 :
此函數從數組輸入變量到目前的符號(symbol)表格中,它取數組var_array並且看待索引值為變量名稱,值為變量值,它將各個key/value對建立一變量在目前符號表格中,以extract_type和prefix為條件。
extract( )檢查現存的變量,由參數extract決定碰撞時處理的方式為何,它可以是以下之一的值 :
EXTR_OVERWRITE
若發生碰撞則覆蓋過現存的變量
EXTR_SKIP
若發生碰撞則不覆蓋過現存的變量
EXTR_PREFIX_SAME
若發生碰撞則將參數prefix加在字首前面成為新變量
EXTR_PREFIX_ALL
把所有變量的字首都加上參數prefix
如果沒有指定參數extract_type,則使用EXTR_OVERWRITE。
注意 : 當extract_type是EXTR_PREFIX_SAME或是 EXTR_PREFIX_ALL時,才需要參數prefix。
Example :
<?php
/* Suppose that $var_array is an array returned from wddx_deserialize */
$size = "large";
$var_array = array("color" => "blue", "size" => "medium","shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
print "$color, $size, $shape, $wddx_size\n";
?>
上面的范例將會產生出 :
blue, large, sphere, medium
$size並沒有覆蓋過去,因為我們指定了EXTR_PREFIX_SAME,而$wddx_size中的結果已被建立,若是使用EXTR_SKIP,則$wddx_size不會被建立,若是使用EXTR_OVERWRITE則 $size的值就是medium,若是使用EXTR_PREFIX_ALL則將會有名稱為$wddx_color、$wddx_size和$wddx_shape的新變量存在。
語法 : bool in_array(mixed needle, array haystack);
說明 :
此函數搜尋數組haystack查看參數needle是否存在數組之中,若在數組之中找到則傳回true,否則傳回false。
Example :
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os))
print "Got Irix";
?>
語法 : mixed key(array array);
說明 :
此函數傳回目前數組指標所指到的索引。
語法 : int krsort(array array);
說明 :
依照索引值的顛倒順序(z-a)將數組重新排列,而索引值與數組的值依然保持原來的關系。
Example :
<?php
$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
krsort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
此范例的結果為 :
fruits[d] = lemon
fruits[c] = apple
fruits[b] = banana
fruits[a] = orange
語法 : int ksort (array array [, int sort_flags] ) );
說明 :
此函數將數組依照索引值由a-z重新排列
Example :
$fruits = array("d" => "lemon" , "a" => "orange" , "b" => "banana" , "c" => "apple");
ksort($fruits);
for(reset($fruits) ; $key = key($fruits) ; next($fruits)) {
echo "fruits[$key] = " .$fruits[$key]. "\n";
}
此范例的結果為 :
fruits[a] = orange
fruits[b] = banana
fruits[c] = apple
fruits[d] = lemon
語法 : void list(...);
說明 :
與array( )相似,此函數不是個正規的函數,此函數是用來在一運作中分配變量的列表。
Example :
<table>
<tr>
<th>Employee name</th>
<th>Salary</th>
</tr>
<?php
$result = mysql($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
print(" <tr>\n"." <td><a href=\"info.php3?id=$id\">$name</a></td>\n".
" <td>$salary</td>\n"." </tr>\n");
}
?>
</table>
語法 : mixed next(array array);
說明 :
傳回數組的內部指標指到的下一個元素,如果沒有下一個元素則會傳回false。
此函數與current()相似,但有一點不同的是此函數在傳回元素之前會先移動數組的內部指標,意思是說此函數會傳回下一個數組的元素及移動數組的內部指標,若數組的內部指標指到數組的元素之外,則會傳回false。
警告 : 如果數組中包含空的元素,則此函數將會傳回false,要處理數組中包含空的元素,可使用each()函數。
語法 : mixed pos(array array);
說明 :
此函數為current( )的別名。
語法 : mixed prev(array array);
說明 :
傳回先前數組的內部指標所指到的數組元素,如果沒有先前的元素則傳回false。
警告 : 如果數組中包含空的元素,則此函數將會傳回false,要處理數組中包含空的元素,可使用each()函數。
此函數和next( )相似,prev( )是將數組的內部指標向後移動來替代next()的向前移動。
語法 : array range(int low, int high);
說明 :
傳回從low到high的整數數組
語法 : mixed reset(array array);
說明 :
reset( )重設數組的內部指標到它的第一個元素。
reset( )傳回數組的第一個元素的值。
語法 : void rsort(array array);
說明 :
此函數將數組的值由z-a重新排列。
Example :
<?php
$fruits = array("lemon","orange","banana","apple");
rsort($fruits);
reset($fruits);
for ($i=0; $i<count($fruits);$i++ ){
echo "fruits[$i] = ".$fruits[$i]."<br>";
}
?>
此范例的結果將會產生 :
fruits[0] = orange
fruits[1] = lemon
fruits[2] = banana
fruits[3] = apple
fruits排列成由z-a的順序
語法 : void shuffle(array array);
說明 :
此函數將數組的元素順序任意排序。
Example :
<?php
$numbers = range(1,20);
srand(time());
shuffle($numbers);
while (list(,$number) = each($numbers)) {
echo "$number ";
}
?>
語法 : int sizeof(array array);
說明 :
傳回數組中元素的數目。
語法 : void sort(array array [, int sort_flags] );
說明 :
此函數會將數組的元素由a-z排列。
Example :
<?php
$fruits = array("lemon","orange","banana","apple");
sort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>
此范例的結果將會產生出 :
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange
fruits排列成由a-z的順序
非必需的第二個參數sort_flags可以使用下列這些值來改變排序的變化:
排序型態旗標:
SORT_REGULAR - 正常的比較項目
SORT_NUMERIC - 以數字比較項目
SORT_STRING - 看作是字符串來比較項目
語法 : void uasort(array array, function cmp_function);
說明 :
此函數能依使用者定義的函數將數組重新排序,而數組的索引值與元素仍然保持原來的關系。
參考usort( ) uksort( )有使用范例
語法 : void uksort(array array, function cmp_function);
說明 :
此函數會依照使用者定義的函數將數組的索引值重新排序。
Example :
<?php
function mycompare($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
uksort($a, mycompare);
while(list($key, $value) = each($a)) {
echo "$key: $value\n";
}
?>
此范例的結果將會產生出 :
20: twenty 10: ten 4: four 3: three
語法 : void usort(array array, function cmp_function);
說明 :
此函數會依照使用者定義的函數將數組的值重新排序。
Example :
<?php
function cmp($a,$b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(3,2,5,6,1);
usort($a, cmp);
while(list($key,$value) = each($a)) {
echo "$key: $value\n";
}
?>
此范例的結果將會產生出 :
0: 6 1: 5 2: 3 3: 2 4: 1