PHP内置数组函数详解(2)

来源:互联网 发布:最优化 陈宝林 豆瓣 编辑:程序博客网 时间:2024/05/17 06:32

二、统计数组元素的个数和唯一性

1.函数count(mixed var[,int var])
函数作用是计算数组中的元素数目或对象中的属性个数。对于数组返回元素的个数,对于其他值则返回1,如果参数是变量而变量没有定义或变量包含一个空的数组,函数返回0.
第二参数是可选的,值为0或1,0为默认值,不检测多维数组。
<?php$people = array("Peter", "Joe", "Glenn", "Cleveland");$result = count($people);echo $result;?>输出:4

2.函数array_count_values(array input)
函数用于统计数组中所有值出现的次数。当规定输入一个数组,返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。
<?php$a=array("Cat","Dog","Horse","Dog");print_r(array_count_values($a));?>输出:Array ( [Cat] => 1 [Dog] => 2 [Horse] => 1 )

3.函数array_unique(array array)
函数用于删除数组中重复的值,并返回没有重复值的新数组。参数需要接收一个数组,当数组中几个元素的值相等时,只保留第一个元素,其他的元素被删除,并且返回的新数组中键名不变。array_unique()值先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略后面的键名。这并不意味着在未排序的array中同一个值的第一个出现的键名会被保留。
<?php$a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat");print_r(array_unique($a));?>输出:Array ( [a] => Cat [b] => Dog )

二、使用回调函数处理数组的函数

函数的回调是PHP中的一种特殊机制,这种机制允许在函数的参数列表中,传入用户自定义的函数地址作为参数处理或完成一定的操作。使用回调函数可以很容易地实现一些所需要的功能。

1.函数array_filter(array input[,callback callback])
函数用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组。该函数的第一个参数是必选项,要求输入一个过滤的数组。第二个参数是可选项,将用户自定义的函数名以字符串形式传入。如果自定义过滤函数返回true,则被操作的数组的当前值就会被含在内返回的结果数组,并将结果组成一个数组。如果原数组是一个关联数组,则键名保持不变。
<?phpfunction myfunction($v) {if ($v==="Horse"){return true;}return false;}$a=array(0=>"Dog",1=>"Cat",2=>"Horse");print_r(array_filter($a,"myfunction"));?>输出:Array ( [2] => Horse )

2.函数array_walk(array $array,callback function[,mixed userdata])
函数对数组中的每一个元素应用回调函数处理。如果成功返回true,否则返回false。第一个参数必选项,输入被指定的回调函数处理的数组。第二个参数也是必选,输入用户定义的回调函数,用于操作传入第一个参数的数组。自定义的回调函数接受两个参数,依次传入进来元素的值作为第一个参数,键名作为第二个参数。函数中提供可选的第三个参数,也将被作为回调函数的第三个参数接收。
如果回调函数需要直接作用于数组中的值,可以将回调函数第一个参数指定为引用&$array

例子 1<?phpfunction myfunction($value,$key) {echo "The key $key has the value $value<br />";}$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");array_walk($a,"myfunction");?>输出:The key a has the value CatThe key b has the value DogThe key c has the value Horse例子 2带有一个参数:<?phpfunction myfunction($value,$key,$p) {echo "$key $p $value<br />";}$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");array_walk($a,"myfunction","has the value");?>输出:a has the value Catb has the value Dogc has the value Horse例子 3改变数组元素的值(请注意 &$value):<?phpfunction myfunction(&$value,$key) {$value="Bird;}$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");array_walk($a,"myfunction");print_r($a);?>输出:Array ( [a] => Bird [b] => Bird [c] => Bird )

3.函数array_map(callback callback,array arr[,array....])
此函数跟array_walk()比更加灵活,并且可以处理多个数组。将回调函数作用到给定数组的元素上,返回用户自定义函数作用后的数组。array_map()是任意参数列表函数,回调函数接受的参数数目应该和传递给array_map()函数的数组数目一致。第一个参数必选,用户自定义的函数名称,或者是null。第二个参数也是必选,输入要处理的数组,也可以输入多个数组作为可选参数。
例子 1<?phpfunction myfunction($v) {if ($v==="Dog"){return "Fido";}return $v;}$a=array("Horse","Dog","Cat");print_r(array_map("myfunction",$a));?>输出:Array ( [0] => Horse [1] => Fido [2] => Cat )例子 2使用多个参数:<?phpfunction myfunction($v1,$v2) {if ($v1===$v2){return "same";}return "different";}$a1=array("Horse","Dog","Cat");$a2=array("Cow","Dog","Rat");print_r(array_map("myfunction",$a1,$a2));?>输出:Array ( [0] => different [1] => same [2] => different )例子 3请看当自定义函数名设置为 null 时的情况:<?php$a1=array("Dog","Cat");$a2=array("Puppy","Kitten");print_r(array_map(null,$a1,$a2));?>输出:Array ([0] => Array ( [0] => Dog [1] => Puppy )[1] => Array ( [0] => Cat [1] => Kitten ))



































0 0
原创粉丝点击