本节介绍的数组处理函数能够完成一些更复杂的数组处理任务,可以把数组作为一个集合处理。例如,对两个货多个数组进行合并,计算数组间的差集或交集,从数组元素中提取一部分,以及完成数组的比较。
①函数array_slice()
array_slice()函数的作用是在数组中根据条件取出一段值并返回。如果数组有字符串键,所返回的数组将保留键名。该函数可以设置4个参数,其函数的原型如下:
array array_slice(array array , int offset [,int length[,bool preserver_keys]])
第一个参数array是必选项,调用时输入要处理的数组。第二个参数offset也是必须的参数,需要传入一个数值,规定取出元素的开始位置。如果是正数,则从前往后开始取,如果是负值,从后向前取offset绝对数目的元素。第三个参数是可选的,也需要传入一个数值,规定被返回数组的长度,如果是负数则从后向前,选取该值绝对数目的元素。如果未设置该值,则返回所有元素。第四个参数也是可选的,需要一个布莱尔类型的值,如果未TRUE值则所返回的数组将保留键名。设置为FALSE值,也是默认值将重新设置索引键值。这里需要注意的是,如果数组有字符串键,所返回的数组将保留键名。函数array_slice()使用的代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php $lamp = array ( "Linux" , "Apache" , "MySQL" , "PHP" ); //使用array_slice()从第二个开始取(0是第一个,1是第二个),取两个元素从数组$lamp中返回 print_r( array_slice ( $lamp , 1,2)); //输出Array([0]=>Apache [1]=>MySQL) //第二个参数使用负数-2,从和面第二个开始取,返回一个元素 print_r( array_slice ( $lamp , -2,1)); //输出Array([0]=>MySQL) //最后一个参数设置为true,保留原有的键值返回 print_r( array_slice ( $lamp , 1,2, true)); //输出Array([1]=Apache [2]=>MySQL) $lamp = array ( "a" => "Linux" , "b" => "Apache" , "c" => "MySQL" , "d" => "PHP" ); //如果数组中有字符串键,默认返回的数组将保留键名 print_r( array_slice ( $lamp , 1,2)); //输出Array([b]=>Apache [c]=>MySQL) ?> |
②函数array_splice()
array_splice()函数与array_slice()函数类似,选择数组中的一系列元素,但不返回,而是删除它们并用其他值代替。如果提供了第四个参数,则之前选中的那些元素将备第四个参数指定的数组取代。最后生成的数组将会返回。其函数原型如下:
array array_splice(array &input, int offset [,int length[,array replacement]])
第一个参数array为必选项,规定要处理的数组。第二个参数offset也是必选项,调用时传入数值。如果offset为正数,则从输入数组中该值指定的偏移量开始移除。如果offset为负,则从输入数组末尾倒数该值指定的偏移量开始移除。第三个参数length是可选的,也需要一个数值,如果省略该参数,则移除数组中从offset到结尾的所有部分。如果指定了length并且为正值,则移除这么多元素。如果指定了length且为负值,则移除从offset到数组末尾倒数length为止中间所有的元素。第四个参数array也是可选的,被移除的元素由此数组中的元素替代。如果没有移除任何值,则此数组中的元素将插入到指定位置。函数array_splice()使用的代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php $input = array ( "Linux" , "Apache" , "MySQL" , "PHP" ); //原数组中的第二个元素后到数组结尾都被删除 array_splice ( $input ,2); print_r( $input ); //输出Array([0]=>Linux [1]=>Apache) $input = array ( "Linux" , "Apache" , "MySQL" , "PHP" ); //从第二个元素开始移除直到数组末尾倒数第一个为止中间所有的元素 array_splice ( $input ,1,-1); print_r( $input ) //输出Array([0]=>Linux [1]=>php) $input = array ( "Linux" , "Apache" , "MySQL" , "PHP" ); //从第二个元素到数组结尾都被第四个参数替代 array_splice ( $input ,1, count ( $input ), "web" ); print_r( $input ) //输出Array([0]=>Linux [1]=>web) $input = array ( "Linux" , "Apache" , "MySQL" , "PHP" ); //最后一个元素被第四个参数数组替代 array_splice ( $input ,-1,1, array ( "web" , "www" )); print_r( $input ) //输出Array([0]=>Linux [1]=>web [2]=>MySQL [3]=>web [4]=>www) ?> |
③函数array_combine()
array_comblie()函数的作用是通过合并两个数组来创建一个新数组。其中一个数组是键名,另一个数组的值为键值。如果其中一个数组为空,或者两个数组的元素个数不同,则函数返回false。其函数原型如下:
array array_combine(array keys, array values)
该函数有两个参数且都是必选项,两个参数必须有相同数目的元素。函数array_combine()使用的代码如下所示:
1
2
3
4
5
6
7
|
<?php $a1 = array ( "OS" , "WebServer" , "DataBase" , "Language" ); //声明第一个数组作为参数1 $a2 = array ( "Linux" , "Apache" , "MySQL" , "PHP" ) //声明第二个数组作为参数2 print_r( array_combine ( $a1 , $a2 )); //使用array_combine()将两个数组合并 //输出Array([OS]=>Linux [WebServer]=>Apache [DataBase]=>MySQL [Language]=>PHP) ?> |
④函数array_merge()
array_merge()函数的作用是把一个或多个数组合并为一个数组。如果键名有重复,该键的值最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。这里要注意如果仅仅向array_merge()函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以0开始进行重新索引。其函数的原型如下:
array array_merge(array array1[,array array2 [,array...]])
该函数第一个参数是必选项,需要传入一个数组。可以有多个可选参数,但必须都是数组类型的数据。返回将多个数组合并后的新数组。函数array_merge()使用的代码如下所示》:
1
2
3
4
5
6
7
8
9
10
|
<?php $a1 = array ( "a" => "Linux" , "b" => "Apache" ); $a2 = array ( "c" => "MySQL" , "b" => "PHP" ); print_r( array_merge ( $a1 , $a2 )); //输出array([a]=>Linux [b]=>php [c]=>MySQL) //仅使用一个数组参数则键名以0开始进行重新索引 $a = array (3=> "php" ,4=> "MySQL" ); print_r( array_merge ( $a )); //输出array([0]=>PHP [1]=>MySQL) ?> |
⑤函数array_intersect()
array_intersect()函数的作用是计算数组的交集。返回的结果数组中包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变,仅有值用于比较。其函数的原型如下:
array array_intersect(array array1, array array2 [,array...])
该函数第一个参数是必选项,与其他数组进行比较的第一个数组。第二个参数也是必选项,与第一个数组进行比较的数组。可以有多个可选参数作为以后的参数,与第一个数组进行比较的数组。函数array_intersect()使用的代码如下所示:
1
2
3
4
5
6
|
<?php $a1 = array ( "Linux" , "Apache" , "MySQL" , "PHP" ); $a2 = array ( "Linux" , "Tomcat" , "MySQL" , "JSP" ); print_r( array_intersect ( $a1 , $a2 )); //输出array([0]=>Linux [2]=>MySQL) ?> |
⑥函数array_diff()
array_diff()函数的作用是返回两个数组的差集数组(值不相同的元素)。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的元素值。在返回的数组中,键名保持不变。其函数的原型如下:
array array_diff(array array1, array array2 [,array...])
第一个参数是必选项,传入与其他数组进行比较的数组。第二个参数也是必选项,传入与第一个数组进行比较的数组。第三个参数以后都是可选项,可用一个或任意多个数组与第一个数组进行比较。本函数仅有值用于比较。函数array_diff()使用的代码如下所示:
1
2
3
4
5
6
|
<?php $a1 = array ( "Linux" , "Apache" , "MySQL" , "PHP" ); $a2 = array ( "Linux" , "Tomcat" , "MySQL" , "JSP" ); print_r( array_diff ( $a1 , $a2 )); //输出array([1]=>Apache [3]=>PHP) ?> |
在上例中,使用array_diff()函数进行两个数组比较时,把在第一个数组中存在且第二个数组中没有的元素返回。