## **PHP支持回调函数的数组函数**
### **1.array_filter**
> **用回调函数过滤数组中的单元**
~~~
array_filter( array $array [, callable $callback [, int $flag = 0 ]] )
~~~
~~~
//用法一(过滤等值为false的元素):
$arr = [0, 1, 2, false, '', null, "0"];
$arr = array_filter($arr);
print_r($arr); // Array ( [1] => 1 [2] => 2 )
//用法二(按照回调函数设置的规则进行过滤):
$arr = [0, 1, 2, false, '', null, "0"];
$arr = array_filter($arr, function ($val) {
if ($val === 0 || $val != false) {
return true;
} else {
false;
}
});
print_r($arr); // Array ( [0] => 0 [1] => 1 [2] => 2 )
~~~
### **2.array_map**
> **为数组的每个元素应用回调函数**
~~~
array_map(myfunction,array1,array2,array3...)
~~~
该函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
可以传递多个数组,回调函数接受的参数数目应该和传递给 array\_map() 函数的数组数目一致。
~~~
$arr1 = [1,2,3,4,5];
$arr2 = [6,7,8,9,10];
//函数写前面,数组参数写后面
$new_arr = array_map(function($val1,$val2){
return $val1 + $val2;
},$arr1,$arr2);
var_dump($new_arr);
//返回结果
//array (size=5)
// 0 => int 7
// 1 => int 9
// 2 => int 11
// 3 => int 13
// 4 => int 15
~~~
### **3.array_walk**
> **使用用户自定义函数对数组中的每个元素做回调处理**
~~~
array_walk(array,myfunction,parameter...)
~~~
~~~
//将数组中的元素用于某种操作
$arr = ['a','b','c'];
array_walk($arr,function($val,$key){
echo "{$key} is {$val} <br/>";
});
//返回结果
//0 is a
//1 is b
//2 is c
//改变数组中的值,传参的时候使用引用
array_walk($arr,function(&$val,$key){
$val .= $val;
});
var_dump($arr);
//array (size=3)
// 0 => string 'aa' (length=2)
// 1 => string 'bb' (length=2)
// 2 => string 'cc' (length=2)
~~~
## 总结
* array\_filter() 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,返回过滤后的数组
* array\_map() 重点在于遍历一个数组或多个数组的元素,返回一个新的数组
* array\_walk() 重点在于遍历数组进行某种操作
* array\_filter() 和 array\_walk()对一个数组进行操作,数组参数在前,函数参数在后
* array\_map() 可以处理多个数组,因此函数参数在前,数组参数在后,可以根据实际情况放入多个数组参数
- PHP篇
- 函数传值和传引用的区别
- 简述PHP的垃圾回收机制
- 简述CGI、FAST-CGI、PHP-FPM的关系
- 常见正则表达式
- 多进程写文件,如何保证都写成功
- php支持回调函数的数组函数
- MySQL篇
- MySQL的两种存储引擎区别
- 事务的四大特性
- 数据库事务隔离级别
- 什么是索引
- 索引有哪些数据结构,优缺点
- 索引的一些潜规则
- SQL的优化方案
- 简述MySQL的锁机制
- 死锁是怎么产生的?怎么解决?
- 简述MySQL的主从复制过程,延迟问题怎么解决
- 分布式事务的解决方案
- 数据库中间件MyCat
- Linux篇
- Linux常用命令
- 对日志文件的IP出现的次数进行统计,并显示次数最多的前5名
- WEB篇
- 跨域是怎么产生的,如何解决跨域
- Redis篇
- redis介绍
- redis和memcached区别
- redis的持久化方案
- 缓存穿透、击穿、雪崩、预热、更新、降级
- 网络篇
- 计算机网络体系结构
- 简述TCP的三次握手、四次挥手过程
- UDP、TCP 区别,适用场景
- HTTP常见状态码含义
- 设计模式篇
- 单例模式
- 简单工厂模式
- 抽象工厂模式
- 观察者模式
- 策略模式
- 注册模式
- 适配器模式
- 安全篇
- 跨站脚本攻击(XSS)
- 跨站点请求伪造(CSRF)
- SQL 注入
- 应用层拒绝服务攻击
- PHP安全
- 运维篇
- docker面试题
- 消息队列篇
- 架构篇
- 数据结构与算法篇