php中数组是一种非常重要的数据组织方式,关于数组的处理函数也各式各样,下面列举一些常用的数组处理函数。
foreach()
使用foreach函数来遍历数组,有两种语法格式
1.
foreach(array_expression as $value){
循环体
}
2.
foreach(array_expression as $key=>$value){
循环体
}
第一种是遍历给定的$array_expression 数组,每次循环将当前元素的值赋值给$value,然后将数组内部指针后移一步,第二种格式除了将元素值赋值给$value之外,还将当前元素对应的键名复制给变量$key.
each()
each函数需要传递一个数组作为参数,每次返回当前该数组读取到的元素的键/值对,并向后移动数组指针到下一个元素的位置。键/值对为四个带有元素关联和索引的数组,如下:
<?php
$contact = array("id"=>1, "姓名"=>"hello");
$id = each($contact);
print_r($id);
?>
在这里print_r输出的结果就是”id”=>1该元素对应的键/值对,为带有四个元素的数组:Array([1]=>1 [value]=>1 [0]=>id [key]=>id).此处的1和value对应的值相同,0和key对应的值相同,当each执行两次之后,再次执行each时就会返回false。
list()
list函数用一步的操作给一组变量赋值,并且list仅能用于数字索引的数组并假定数字索引是从0开始,用法如下:
<?php
$info = array('coffee', 'bown','caffeine');
list($drink, $color, $power) = $info;
?>
list将数组中的元素依次赋值给list中的变量,也可如下使用:
list(, , $power) = $info;
array_values()
该函数参数为一个数组,返回值为数组中所有元素的值形成的一个新的以数字索引的数组,原数组保持不变
array_keys()
该函数返回数组中的所有的键名,该函数有一个必需参数和两个可选参数,第一个必需参数为要查找的数组,第二个参数为是否制定键名对应的值进行查找,第三个参数为查找是否严格匹配类型,当只有第一个参数时,函数将所有的键名以数字索引构成新的数组返回。当含有两个参数时,函数将只返回值为指定值的键名,当含有三个参数时,函数将严格比较指定值与元素值,只有全等时才会返回。
in_array()
该函数是检查数组中是否存在某个值。该函数有三个参数,第一个参数是要搜索的值,第二个参数是要进行查找的数组,若第一个参数为字符串并且第三个参数为TRUE,则严格区分大小写进行查找,若第一个参数不是字符串,并且第三个参数为TRUE则比较是回进行数据类型的比较,只有当数据类型相同并且值相同时才会返回true。array_search()与in_array()函数功能参数相同,也支持对数据类型的严格判断。
array_key_exists()
检查给定的键名或索引是否存在于数组当中,由于数组中的键名是唯一的所以不需要对类型进行比较。isset()具有相同的功能,也是对键名或者索引进行检查,但isset()对于数组中的NULL值不会返回TRUE了,而array_key_exists()会。
array_flip()
该函数交换数组中的键和值,返回一个反转之后的数组,该函数只有个参数,为要进行反转的数组,若同一个值出现多次时将最后一个键名作为它的值,覆盖前面出现的元素,原数组中值的数据类型必须是字符串或者整数,否则函数将报错。
array_reverse()
将原数组中的元素的顺序进行反转创建新的数组并返回,函数有两个参数,第一个参数为一个数组,第二个参数可选,若原数组索引为默认数字索引且指定为true则元素的键名与值成对保持不变,否则键名将丢失,重新生成数字索引,如下两种结果:
<?php
$lamp = array("os", "linux", "webserver", "apache", "database", "mysql");
print_r(array_reverse($lamp));
?>
执行结果为:
Array
(
[0] => mysql
[1] => database
[2] => apache
[3] => webserver
[4] => linux
[5] => os
)
<?php
$lamp = array("os", "linux", "webserver", "apache", "database", "mysql");
print_r(array_reverse($lamp,true));
?>
执行结果为:
Array
(
[5] => mysql
[4] => database
[3] => apache
[2] => webserver
[1] => linux
[0] => os
)
count()
该函数统计数组中的元素数目以及唯一值的个数,对于数组返回返回其中元素值的个数,对于其他值则返回1,若参数未定义或者参数为空值,该函数返回0。第一个参数是必需的,为一个数组或对象,第二个参数可选,判定是否递归的检测数组中数组的元素个数,0为默认值,不检测。
array_count_values()
该函数用于统计数组中所有值出现的次数,参数输入一个数组,返回一个数组,其元素的键名是原数组的值,键值是该该值在原数组中出现的次数。
array_unique()
该函数用于删除数组中重复的值,并返回没有重复值的新数组,参数需要接收一个数组,当数组中几个元素值相等时,只保留第一个元素,其他的元素被删除,并且返回新数组的键名不变(数字索引对应的键值同样会保持不变,删除之后,数字索引的键名会不连续。
array_filter()
该函数使用回调函数过滤数组中的元素,返回按照用户自定义函数过滤后的新数组,该函数有两个参数,第一个参数为数组,第二个参数为用户自定义的过滤函数,用户自定义函数的返回值只有true or false,以此用来判断是否进行过滤,如果自定义函数返回true则进行保留该元素。如下例:
<?php
$a = array(1, 2, 3, 4, 5, 6, 7, 8);
function myFun($var){
if($var%2 == 0){
return true;
}else{
return false;
}
}
print_r(array_filter($a, "myFun"));
?>
执行结果如下:
Array
(
[1] => 2
[3] => 4
[5] => 6
[7] => 8
)
该段代码是利用array_filter函数过滤数组中的元素,过滤函数保留的是能够被2整除的数。过滤之后得到的元素与其对应的数字索引保持不变。
array_walk()
该函数对数组中的每个元素都会调用回调函数进行处理,成功返回true,否则返回false。自定义函数有两个必须参数,第一个参数接收传入的元素的值,第二个参数接收传入的元素的键名,第三个为可选参数,如果有定义第三个参数,第三个参数也会被自定义函数接收。如下例:
<?php
$a = array(0, 1, 2, 3, 4, 5, 6, 7);
function myFun($var, $key){
if($var%2 == 0){
echo "No.$key is two $var\n";
}else{
echo "No.$key is one $var\n";
}
}
array_walk($a, "myFUn");
?>
执行结果:
No.0 is two 0
No.1 is one 1
No.2 is two 2
No.3 is one 3
No.4 is two 4
No.5 is one 5
No.6 is two 6
No.7 is one 7
这段代码使用array_walk函数将每个元素的值和键名传入回调函数进行处理判断,并输出结果。
array_map()
该函数调用回调函数时一次性处理多个数组,在多个数组之间进行判断。array_map()函数第一个参数为调用的回函数名称,第二个参数为要进行处理的数组,后面的数组为可选参数。实例如下:
<?php
$a = array(0, 1, 2, 3, 4, 5, 6, 7);
$b = array(2, 3, 2, 3, 6, 7, 8, 7);
function myFun($var, $var1){
if($var == $var1){
return "same";
}else{
return "different";
}
}
print_r(array_map("myFun", $a, $b));
?>
执行结果如下:
Array
(
[0] => different
[1] => different
[2] => same
[3] => same
[4] => different
[5] => different
[6] => different
[7] => same
)
该函数执行的结果为两个数组进行比较之后的结果,返回值为一个数组,是两个传入的数组元素一一进行比较之后得到的每个元素处理结果组成的数组,若两个数组长度不相同,则会自动在短的数组之后补空进行处理。