## **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面試題
- 消息隊列篇
- 架構篇
- 數據結構與算法篇