1. 程式人生 > >php中array_reduce和array_map的用法

php中array_reduce和array_map的用法

1、array_reduce( $arr , callable $callback ) 使用回撥函式迭代地將陣列簡化為單一的值。

其中$arr 為輸入陣列,$callback($result , $value)接受兩個引數,$result為上一次迭代產生的值,$value是當前迭代的值。

使用array_reduce()替代foreach()迴圈最常用的一個業務場景也許就是陣列求和,比如:

 
  1. $arr = array('1','2','3'); //計算陣列中數字的和

  2. $sum = 0;

  3. foreach($arr as $v){ //使用 foreach迴圈計算

  4. $sum += $v;// echo $sum

  5. }

  6. echo array_reduce($arr , function($result , $v){ //使用array_reduce()迭代求和

  7. Return $result+$v;

  8. });

再比如,從資料庫中查詢出一組資料,接下來想得到他們的 id 值,拼接成類似 (1,2,3,4,5) 字串,然後在 “SELECT * WHERE id in(1,2,3,4,5) ” 處理,這時候完全可以 foreach() 陣列處理,其實也可以使用 array_reduce(),因為 array_reduce()就是“迭代地將陣列簡化為單一的值”,如下

 
  1. $arr = array(

  2. array("id"=>1,'name'=>"a"),

  3. array("id"=>2,"name"=>"c"),

  4. array("id"=>3,"name"=>"d")

  5. );

  6. echo array_reduce($arr , function($result , $v){

  7. Return $result.','.$v['id'];

  8. });

在業務中遇到foreach迴圈處理,有時候我們就可以想想能不能像這樣處理。

2、array_map(callback $callback , $arr)  返回使用者自定義函式作用後的陣列。回撥函式接受的引數數目應該和傳遞給 array_map() 函式的陣列數目一致。

向array_map傳入陣列,出來的還是陣列,而不是上面array_reduce()的一個值。所以,array_map()最簡單的就是把callback函式作用到每個陣列的值上,最常見的場景就是 intval()、trim()  陣列中的值,在一些框架的原始碼中也經常見到,比如:

 
  1. $arr = array('2','3','4','5');

  2.  
  3. array_map('intval' , $arr);//在拼接sql查詢的時候,很有用

  4.  
  5. array_map('htmlspecialchars' , $arr);

雖然有時候foreach完全可以達到相同的效果,但是在程式碼中使用 array_map、array_reduce還有array_filter之類的函式,可以讓程式碼更加的簡潔,而不是一個php檔案到處都是foreach迴圈。

 

array_map還可以結合陣列函式array_shift(array_shift() 函式刪除陣列中第一個元素,並返回被刪除元素的值。)將二維陣列轉換成一維陣列,比如:

 

 
  1. $arr = array(

  2. array("id"=>1,'name'=>"a"),

  3. array("id"=>2,"name"=>"c"),

  4. array("id"=>3,"name"=>"d")

  5. );

  6. array_map('array_shift',$arr);