巧用array_map()和array_reduce()替代foreach循環


 

工作中經常會用到foreach 遍歷數據,但是PHP有兩個內置函數可以實現foreach很難實現的功能

1、array_reduce( $arr , callable $callback ) 使用回調函數迭代地將數組簡化為單一的值。

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

使用array_reduce()替代foreach()循環最常用的一個業務場景也許就是數組求和,比如:

$arr = array('1','2','3'); //計算數組中數字的和  $sum = 0;  foreach($arr as $v){ //使用 foreach循環計算  $sum += $v;// echo $sum  }  echo array_reduce($arr , function($result , $v){ //使用array_reduce()迭代求和  Return $result+$v;  }); 

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

$arr = array(  array("id"=>1,'name'=>"a"),  array("id"=>2,"name"=>"c"),  array("id"=>3,"name"=>"d") ); echo array_reduce($arr , function($result , $v){  Return $result.','.$v['id']; }); 

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

2、array_map(callback $callback , $arr)  返回用戶自定義函數作用后的數組。回調函數接受的參數數目應該和傳遞給 array_map() 函數的數組數目一致。

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

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

雖然有時候foreach完全可以達到相同的效果,但是在代碼中使用 array_map、array_reduce還有array_filter之類的函數,可以讓代碼更加的簡潔,而不是一個php文件到處都是foreach循環。 “這並非炫耀什么奇技淫巧,這只是PHP自己的正常的方式而已” 。


免責聲明!

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



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