array_map與array_walk的用法與區別詳解
阿新 • • 發佈:2018-11-19
一、背景
今天看程式碼的時候,發現程式碼中使用array_map來統一去掉陣列中的空格,比起迴圈來,方便了很多。網上百度一下array_map,然後發現了array_walk。好吧,這兩個函式雖然在某些情境下有異曲同工之妙,但是區別還是很大的。
二、關於array_map
1、文件
array_map() 函式將使用者自定義函式作用到陣列中的每個值上,並返回使用者自定義函式作用後的帶有新值的陣列。
回撥函式接受的引數數目應該和傳遞給 array_map() 函式的陣列數目一致。
http://www.w3school.com.cn/php/func_array_map.asp
大家看一下文件,就知道大概的用法了。
//這裡可以傳遞多個數組作為引數,與之對應的,myfunction()函式中也要有多個引數。是一一對應的關係
array_map(myfunction,array1,array2,array3...)
2、例子
public function test_array_map(Request $request) { $aa = array('aa', 'bb'); $bb = array_map(function($item) { $item = $item . 'aa' ; return $item; }, $aa); var_dump($aa); echo'<br/>'; var_dump($bb); } //結果 array(2) { [0]=> string(2) "aa" [1]=> string(2) "bb" } array(2) { [0]=> string(4) "aaaa" [1]=> string(4) "bbaa" }
此處可以看到,$bb是我們新返回的陣列,也是經過我們自己處理過的陣列。此時是不會影響到原陣列的。
三、array_walk
1、文件
array_walk() 函式對陣列中的每個元素應用使用者自定義函式。在函式中,陣列的鍵名和鍵值是引數。
http://www.w3school.com.cn/php/func_array_walk.asp
用法:array_walk(array,myfunction,userdata…)
這裡的例子看文件就可以,比較清楚。需要注意的是該函式的返回值是bool值
2、例子:
public function test_array_walk(Request $request)
{
$aa = array('aa', 'bb');
$bb = array_walk($aa,function($item) {
$item = $item . 'aa' ;
return $item;
});
var_dump($aa);
echo'<br/>';
var_dump($bb);
}
//結果
array(2) { [0]=> string(2) "aa" [1]=> string(2) "bb" }
bool(true)
這裡發現返回的值是bool值。如果想要輸出的話,就在函式中使用echo $item
。這裡列印原陣列的值是不變的,如果要改變原陣列的值,則需要使用引用符號:
//這裡加了個引用
$bb = array_walk($aa,function(&$item) {
$item = $item . 'aa' ;
return $item;
});
//其他不變列印結果(原陣列已經被改變)
array(2) { [0]=> string(4) "aaaa" [1]=> string(4) "bbaa" }
bool(true)
四、區別
1、array_map的用法是array_map(函式名,陣列),而array_walk的用法是array_walk(陣列,函式名);
2、array_map裡面的函式可以是自定義函式,也可以是php自帶的函式,比如trim去除空格等。而array_walk裡面的函式只能是自定義的函式
3、array_map不可以改變原函式的值,會獲取到新的陣列。array_walk是可以改變原函式的值的(加個引用)。
4、array_map必須要有返回值,因為要填充陣列。而array_walk可以沒有返回值,輸出的話要在呼叫的函式中通過echo來輸出。
這兩個函式有個共同點就是可以簡化我們的程式碼,有些簡單的foreach迴圈替換功能,完全可以用這兩個函式來實現。記錄一下。
end