【php學習】array_map,array_walk,array_filter的區別


array_map(function($v){
    //
}, $array);
array_walk($array, function($v, $k){
    //
});
array_filter($array, function($v){
    //
});

以上三者 array_map、array_walk、array_filter

相同點:都是利用回調函數對數組中每個元素進行操作。

不同點:

  • 返回值
  • 回調函數的參數
  • 是否改變數組的值

 

array_map 返回的是新數組,原數組不變(新數組和原數組的數組長度應該一樣)

array_walk 返回的布爾值,如果要改變數組元素的值,回調函數第一個參數必須是引用,如  array_walk($array, function(&$v, $k){});  , arrary_walk 的回調函數還能夠接收數組的key。

array_filter 返回的是新數組,原數組不變。它的作用是過濾數組中的元素。回調函數返回真,元素才能保存到新數組中,即(新數組和原數組的數組長度可能不一樣)

下面是個例子

 1 echo "<pre>";
 2 testArrayCallBack();
 3 function testArrayCallBack(){
 4     $arr = array(12,64,3,47);
 5     
 6     //array_map返回的新數組,原數組不變
 7     $newArr = array_map(function($v){
 8         return ++$v;
 9     },$arr);
10     echo "原數組:<br/>"; print_r($arr);
11     echo "array_map 返回的新數組:<br/>"; print_r($newArr);
12     
13     //array_walk返回布爾值,原數組改變
14     $b = array_walk($arr, function(&$v, $k){    //如果想回調函數能直接改變數組的值,那么回調函數地址參數應為引用。
15         $v+=$k;
16     });
17     echo "原數組:<br/>"; print_r($arr);
18     echo "array_walk 返回的布爾值:"; var_dump($b );
19     
20     //array_filter返回新數組,原數組不變
21     $newArr = array_filter($arr, function($v){
22         return $v > 10;
23     });
24     echo "原數組:<br/>"; print_r($arr);
25     echo "array_filter返回的新數組:<br/>"; print_r($newArr);
26 }

 

執行結果:

原數組:
Array
(
    [0] => 12
    [1] => 64
    [2] => 3
    [3] => 47
)
array_map 返回的新數組:
Array
(
    [0] => 13
    [1] => 65
    [2] => 4
    [3] => 48
)
原數組:
Array
(
    [0] => 12
    [1] => 65
    [2] => 5
    [3] => 50
)
array_walk 返回的布爾值:bool(true)
原數組:
Array
(
    [0] => 12
    [1] => 65
    [2] => 5
    [3] => 50
)
array_filter返回的新數組:
Array
(
    [0] => 12
    [1] => 65
    [3] => 50
)

 

總結:

array_map 對參數數組的每個元素進行操作,返回新數組,不改變原數組的值

array_walk 對參數數組的每個元素進行操作,返回布爾,改變原數組的值。

array_filter 對參數數組的元素進行過濾,返回新數組,不改變原數組的值。


免責聲明!

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



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