array_filter、array_map、array_walk解釋


/**

* array_filter 用回調函數處理數組中的各個元素,
* 重點在於過濾(而不是新增)某個元素,當你處理到一個元素時,
* 如果返回了false,那么這個元素將會被過濾掉。PS:保持了原來的索引。
*/
$arr = array(1,2,3,'aaa'=>4,5);

$newArr = array_filter($arr,function($val) {
if ($val == 3) {
return false; // 返回false 這個元素將要被過濾掉
}
return true; //保留的元素
});

print_r($newArr);

 

/**
array_map 函數勢必比array_walk要更常用,因為php內置函數默認就是傳的值而不是引用,
那么你使用內置函數如:intval() strtolower()。。的時候walk就無能為力了
* array_map 用回調函數處理數組中的各個元素,
* 在函數中你可以改變各個元素的值,
* 重點在你需要什么樣的值就返回什么樣的值,保持索引。
可以一次性處理多個數組。但是數組的數量應該與回調函數的參數保持一致
*/
$arr = array(1,2,3,'aaa'=>4,5);

$newArr = array_map(function($val) {
if ($val == 3) {
$val *= $val;
}
return $val; //這里是改變過的值,可以返回給新的數組

},$arr);

print_r($newArr);

 

/**
* ps : 如果處理的數組不是二維,可以用array_map進行取代
* 處理二維數組用array_walk_recursive函數,
* 在處理一維數組時,但是或許array_walk函數因為是傳引用,處理大數組時效率或許會比array_map高呢?
* array_walk 用回調函數處理數組中的各個元素,
* 此函數返回bool。所以需要配合引用傳值直接改變原數組才有一定的功效。
*/

//摘自手冊 只有 array 的值才可以被改變,用戶不應在回調函數中改變該數組本身的結構。
//例如增加/刪除單元,unset 單元等等。
$arr = array(1,2,3,'aaa'=>4,5);

array_walk($arr,function(&$val,$key) {
if ($val == 3) {
echo $key.'<br/>';
$val = 33333;
}
});

print_r($arr);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM