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

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

①函数array_filter()
array_filter函数用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组。该函数有两个参数,其函数的原型如下:

array array_filter(array input [,callback callback])

该函数的第一个参数是必选项,要求输入一个被过滤的数组。第二个参数是可选项,将用户自定义的函数名以字符串形式传入。如果自定义过滤函数返回true,则被操作的数组的当前值就被包含在返回的数组中,并将结果组成一个新的数组。如果原数组是一个关联数组,则键名保持不变。函数array_filter()使用的代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php

//自定义函数myFun,为数组过滤设置条件

function myFun($var){

if($var % 2 ==0)

return true;

}

//声明值为整数序列的数组

$array = array("a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5);

//使用函数array_filter()将定义的函数名以字符串的形式传给第二个参数

print_r(array_filter($array,"myfun"));

//过滤后的结果输出 Array([b]=>2 [d]=>4)

?>

在上面的代码中,array_filter()函数一次将 $array数组中的每个值传递到myFun()函数中,如果myFun()函数返回TRUE,则$array数组的当前值会被包含在返回的结果数组中,并将结果组成一个新的数组返回。

②函数array_walk()

array_walk()函数对数组中的每个元素应用回调函数处理。如果成功则返回TRUE,否则返回FALSE。其函数的原型如下:

bool array_walk(array $array,callback funcname[,mixed userdata])

该函数的第一个参数是必选项,要求输入一个被指定的回调函数处理的数组。第二个参数也是必选项传入用户定义的回调函数,用于操作传入第一个参数的数组。array_walk()函数一次将第一个参数的数组中的每个值传递到这个自定义的函数中。自定义的这个回调函数中应该接收两个参数,依次传入进来的元素的值作为第一个参数,键名作为第二个参数。在array_walk()函数中提供可选的第三个参数,也将被作为回调函数的第三个参数接收。

如果自定义的回调函数需要的参数比给出的多,则每次array_walk()调用回调函数时都会产生一个E_WARNING级的错误。这些警告可以通过在array_walk()调用前加上PHP的错误操作符@来抑制,或者用error_reporting()。

如果回调函数需要直接作用于数组中的值,可以将回调函数第一个参数指定为引用:&$value。函数array_walk()使用的代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

<?php

//定义一个可以作为回调的函数,名称为myfun1

function myfun1($value,$key) {

echo "The key $key has the value $value<br>";

}

//定义一个数组$lamp

$lamp = array("a"=>"Linux","b"=>"Apache","c"=>"MySQL","d"=>"PHP");

//使用array_walk()函数传入一个数组和一个回调函数

array_walk($lamp,"myfun1");

/*执行后的输出如下结果:

The key $key has the value Linux

The key $key has the value Apache

The key $key has the value MySQL

The key $key has the value PHP

*/

//定义一个可以作为回调的函数,名称为myfun2

function myfun2($value,$key,$p){

echo "$key $p $value <br>";

}

//使用array_walk函数传入三个参数

array_walk($lamp,"myfun2","has the value")

/*执行后输出如下结果:

a has the value Linux

b has the value Apache

c has the value MySQL

d has the value PHP

*/

//定义一个可以作为回调的函数,名称为myfun3,改变数组元素的值

function myfun3(&$value,$key){

$value="web" //将改变原数组中每个元素的值

}

//使用array_walk()函数传入两个参数,其中第一个参数为引用

array_walk($lamp,"myfun3");

print_r($lamp); //输出:array([a]=>Web [b]=>Web [c]=>Web [d]=>Web)

?>

③函数array_map()

与上一个array_walk()函数相比,array_map()函数将更加灵活,并且可以处理多个数组。将回调函数作用到给定数组的元素上,返回用户自定义函数作用后的数组。array_map()是任意参数列表函数,回调函数接收的参数数目应该和传递给array_map()函数的数组数目一直。其函数原型如下:

array array_map(callback callback ,array arr1[,array...])

该函数中第一个参数是必选项,是用户自定义回调函数的名称,或者是null。第二个参数也是必选项,输入要处理的数组。也可以接着输入多个数组作为可选参数。函数array_map()使用的代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<?php

//自定义一个函数作为回调函数,函数名称为myfun1

function myfun1($v) {

if ($v === "MySQL"){         //如果数组中元素的值等于MySQL条件成立

return "Oracle";       //返回Oracle

}

return $v;       //不等于MySQL的元素都返回传入的值

}

//声明一个有4个元素的数组$lamp

$lamp=array("Linux","Apache","MySQL","PHP");

//使用array_map()函数传入一个函数名和一个数组参数

print_r(array_map("myfun1",$lamp));

//上面程序执行后输出Array([0]=>Linux [1]=>Apache [2]=>Oracle [3]=>php)

//声明一个函数使用多个参数,回调函数接收的参数数目应该和传递给array_map()函数的数目一致,

//自定义一个函数需要两个参数两个数组中的元素依次传入

function myfun2($v1,$v2) {

if ($v1===$v2){      //如果两个数组中的元素值相同则条件成立

return "same";

}

return "different";

}

$a1=array("Linux","PHP","MySQL");      //声明数组$a1,有三个元素

$a2=array("Unix","PHP","Oracle");

print_r(array_map("myfun2",$a1,$a2));        //使用array()函数传入多个数组

//上面程序执行后输出:Array ( [0] => different [1] => same [2] => different )

//当自定义函数名设置为null时的情况

$a1 = array("Linux","Apache");

$a2 = array("MySQL","PHP");

print_r(array_map(null,$a1,$a2));

//上面程序执行后输出:array([0]=>Array([0]=>Linux [1]=>MySQL) [1]=>array([0]=>Apache [1]=>PHP))

?>

通常array_map()函数使用了两个或更多数组时,它们的长度应该相同,因为回调函数时平行作用于相应的单元上的。如果数组的长度不同,则最短的一个将被用空的单元扩充。

>> 本文固定链接: http://php.ncong.com/php_course/arry_function/array_huidiao.html

>> 转载请注明: 恩聪php 2014年04月13日 于 恩聪PHP学习教程 发表

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

时间: 2024-08-03 21:07:24

使用回调函数处理数组的函数的相关文章

函数指针,函数指针数组,函数返回值为函数指针

函数的名字就是函数的首地址:定义函数指针; int (*p)(int ) p为函数指针变量名字,int 为函数的返回值类型为int型:(int)为函数的形参类型为int型, 注:因为优先级所以要用(*p),否则就会p先和后面的()结合为int*p(int),意思就变为p(int)函数的返回值为int* 注:main2()函数中   int (*p[])(int ,int )  为一维数组,下面写错了, #include<stdio.h> #include<stdlib.h> int

php数组键值操作和数组统计函数-函数

1.数组函数//作用:提供了很多官方写的很多有用的代码段,提高编写速度 1)数组的键值操作函数 array_values();//获取数组中的值 array_keys();//获取数组中的键 in_array();//检查一个值是否在数组中 array_flip();//键和值对调 array_reverse();//数组中的值反转 模拟获取key的数值<?php $arr=array ("name"=>"user1","age"=&

PHP中的数组(二)常用数组处理函数

数组的相关处理函数    一.数组键/值操作有关的函数        1.array_values()   无论是关联的还是索引的返回的都是索引数组 1 <?php 2 $lamp=array("os"=>"Linux","webserver"=>"Apache","db"=>"Mysql","language"=>"php&q

入职培训笔记记录--day9(1、指针函数与函数指针、函数指针数组 2、malloc memset 3、递归函数 4、结构体 5、共用体---》大小端 6、枚举)

1.指针函数与函数指针.函数指针数组 指针函数:返回值为指针的函数 char *fun() { char str[] = "hello world"; return str; } int main() { char *p = fun(); puts(p); return 0; } 编译时,会出现警告,返回了一个已经被释放掉的内存空间的首地址解决方法:1.static 2.char *str = "hello world"; 3.malloc 注意:使用完后要free

函数指针和指针函数和回调函数以及函数指针数组

1.首先来说,函数指针 就是函数的指针 2.指针函数,就是指针的函数.也就是返回值是个指针 一.指针 [1]指针  1--- 指针变量:用于存放地址量的变量  2--- 地址常量   int a = 20:   int *p = &a: [2]运算符  1--- &  2--- *(指针解引用):通过地址获取其内容  3--- []:只针对于指针运算.指针加单位长度,后取*运算. 二.函数 [1]指针函数 [2]函数指针 [3]函数指针数组  本质:数组,由多个元素组成  元素:函数指针类

php 数组常用函数

PHP数组中常用的函数: 1.//array_values - 返回数组中所有的值 $array = array("name"=>"zhangsan","age"=>"10","sex"=>"man"); $tem= array_values($array); echo "<pre>"; print_r($tem); echo "

PHP:数组操作函数array_walk()和array_map()

array_map()的函数原型为:array array_map ( callback callback, array arr1 [, array ...] ) array_map() 返回一个数组,该数组包含了arr1中的所有单元经过callback作用过之后的单元.callback接受的参数数目应该和传递给 array_map() 函数的数组数目一致.  callback函数就是array_map所将调用来处理元素单元函数,应以字符串的形式将函数名传递给array_map()   如:(p

PHP移动互联网开发笔记(4)——自定义函数及数组

原文地址:http://www.php100.com/html/php/rumen/2014/0326/6705.html 一.自定义函数 自定义函数就是我们自己定义的函数,在PHP中自定义函数格式如下: function funname(arg1, arg2, arg3......){ //TODO return values; } view source print? 01.<?php  02.function fun($m, $n){  03.if($m==0 || $n==0){  04

8.4 数组指针 函数指针

数组指针的含义: 一个指针指向一个数组 ,这个指针+1就会加一个数组的长度. #include <stdio.h> void show( char(*s)[10], int n) { while(n--) printf("%s\n",s++); } int main() { char s[3][10] = {"hello","liuwei","xuanyuan"}; show(s,3); return 0; } 指