"运算子来给予索引值,此函数不是正规的函数,主要是用来表示数组。$arr=array(0=&g"/> "运算子来给予索引值,此函数不是正规的函数,主要是用来表示数组。$arr=array(0=&g">
Maison > Article > développement back-end > 数组函数小结
数组函数总结
本文档整理自php学习手册,在使用过程中发现数组函数大量使用,今天将它全部整理出来,便于以后查阅和使用。
语法 : array array([mixed ...]);
说明 :
传回参数的数组,参数能以"=>"运算子来给予索引值,此函数不是正规的函数,主要是用来表示数组。
$arr=array(0=>123,2=>’tere’);
array_count_values --- 计算数组所有的值
语法 : array array_count_values(array input);
说明 :
此函数传回一计算后之数组结果,传回的数组其索引值为参数input的值,而数组的值则是参数input所出现的次数。
Example :
$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 :
$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 :
$trans = array_flip($trans);
$original = strtr($str , $trans);
?>
语法 : array array_intersect (array array1, array array2 [, array ...])
说明 :
Array_intersect( )传回array1出现在所有引数之中的所有的值,此函数将传回一数组型态,传回的数组其索引值将保留。
Example :
$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 :
$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 :
$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 :
$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 :
$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 :
$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 :
$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 :
$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的长度依照变量的数目而增加。
有着相同的效果是 :
$array[ ] = $var;
?>
重覆各个var。
传回数组中元素的新数目。
Example :
$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 :
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 :
$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 :
$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 :
$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 :
$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 :
$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 :
$queue = array("p1", "p3");
array_unshift($queue, "p4", "p5", "p6");
?>
此范例将会使$queue有五个元素:"p4","p5","p6","p1"和"p3"。
语法 : array array_values(array input);
说明 :
此函数从数组array传回所有的值。
Example :
$array = array("size" => "XL", "color" => "gold");
array_values($array); // returns array("XL", "gold")
?>
语法 : int array_walk(array arr , string func);
说明 :
使数组arr的每个元素和函数名称func相对应,元素传到函数func的第一个参数,如果函数func超过一个以上的参数,则会有警告讯息,要抑制警告讯息可在此函数前加上’@’,[email protected]_walk,或是使用error_reporting。
注意 : 此函数确实会将数组arr的每个元素依序代入,因此任何元素的改变都将影响数组本身。
注意 : PHP4.0.新增传送索引(key)和使用者资料(userdata)到函数func。在PHP4中array_walk( )预设不重设(reset)数组,因此必须要呼叫reset( )
Example :
$fruits = array("d" => "lemon" , "a" => "orange" ,"b" => "banana" , "c" => "apple");
function test_alter($item1) {
$item1 = 'bogus';
}
function test_print($item2) {
echo "$item2
\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 :
$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 :
$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 :
$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 :
$foo = array("bob" , "fred" , "jussi" , "jouni");
$bar = each($foo);
?>
$bar现在包含了以下key/value对:
0 => 0
1 => 'bob'
key => 0
value => 'bob'
$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 :
echo "Values submitted via POST method:
";
while(list($key , $val) = each($HTTP_POST_VARS)) {
echo "$key => $val
";
}
?>
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 :
/* 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 :
$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 :
$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 :
Employee name | Salary |
---|---|
$salary | \n"."
语法 : mixed next(arrayarray);
说明 :
传回数组的内部指标指到的下一个元素,如果没有下一个元素则会传回false。
此函数与current()相似,但有一点不同的是此函数在传回元素之前会先移动数组的内部指标,意思是说此函数会传回下一个数组的元素及移动数组的内部指标,若数组的内部指标指到数组的元素之外,则会传回false。
警告 : 如果数组中包含空的元素,则此函数将会传回false,要处理数组中包含空的元素,可使用each()函数。
语法 : mixed pos(arrayarray);
说明 :
此函数为current( )的别名。
语法 : mixed prev(arrayarray);
说明 :
传回先前数组的内部指标所指到的数组元素,如果没有先前的元素则传回false。
警告 : 如果数组中包含空的元素,则此函数将会传回false,要处理数组中包含空的元素,可使用each()函数。
此函数和next( )相似,prev( )是将数组的内部指标向后移动来替代next()的向前移动。
语法 : array range(intlow, int high);
说明 :
传回从low到high的整数数组
语法 : mixed reset(arrayarray);
说明 :
reset( )重设数组的内部指标到它的第一个元素。
reset( )传回数组的第一个元素的值。
语法 : void rsort(arrayarray);
说明 :
此函数将数组的值由z-a重新排列。
Example :
$fruits =array("lemon","orange","banana","apple");
rsort($fruits);
reset($fruits);
for ($i=0; $i echo"fruits[$i] = ".$fruits[$i]." } ?> 此范例的结果将会产生 : fruits[0] =orange fruits[1] =lemon fruits[2] =banana fruits[3] = apple fruits排列成由z-a的顺序 语法 : voidshuffle(array array); 说明 : 此函数将数组的元素顺序任意排序。 Example : $numbers = range(1,20); srand(time()); shuffle($numbers); while (list(,$number) = each($numbers)) { echo "$number "; } ?> 语法 : int sizeof(arrayarray); 说明 : 传回数组中元素的数目。 语法 : void sort(arrayarray [, int sort_flags] ); 说明 : 此函数会将数组的元素由a-z排列。 Example : $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(arrayarray, function cmp_function); 说明 : 此函数能依使用者定义的函数将数组重新排序,而数组的索引值与元素仍然保持原来的关系。 参考usort( ) uksort( )有使用范例 语法 : void uksort(arrayarray, function cmp_function); 说明 : 此函数会依照使用者定义的函数将数组的索引值重新排序。 Example : 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: ten4: four 3: three 语法 : void usort(arrayarray, function cmp_function); 说明 : 此函数会依照使用者定义的函数将数组的值重新排序。 Example : 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
";