在這介紹一個(gè)PHP語言里比較常用的數(shù)組操作函數(shù),array_map函數(shù)谒拴,當(dāng)我第一次接觸到這個(gè)函數(shù)時(shí)呻右,對這個(gè)函數(shù)的強(qiáng)大功能所震懾阵难,也越發(fā)感覺PHP語言的好玩之處。
說明
了解PHP函數(shù)的最好的去處就是PHP手冊漩蟆,PHP手冊上的關(guān)于此函數(shù)的說明:
array array_map ( callable $callback , array $arr1 [, array $... ] )
array_map() 返回一個(gè)數(shù)組垒探,該數(shù)組包含了 arr1 中的所有單元經(jīng)過 callback 作用過之后的單元。callback 接受的參數(shù)數(shù)目應(yīng)該和傳遞給 array_map() 函數(shù)的數(shù)組數(shù)目一致怠李。
就是說將$arr1數(shù)組的每個(gè)單元的值圾叼,通過回調(diào)函數(shù)作用后存儲進(jìn)一個(gè)新的數(shù)組作為新數(shù)組的對應(yīng)單元的值
而還有個(gè)厲害的地方是這個(gè)函數(shù)可以傳入多個(gè)數(shù)組,也就是在你定義的回調(diào)函數(shù)中可以同時(shí)對多個(gè)數(shù)組的每個(gè)單元的值同時(shí)操作
操作范例
例子1:
<捺癞?php
function cube($n){
return $n*$n;
}
$num = array(1,2,3,4,5);
var_dump(array_map("cube", $num));
輸出:
array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) }
例子2(匿名函數(shù)也有效):
<夷蚊?php
$func = function($n,$m){
return ("這個(gè)數(shù)組的第 $n 個(gè)位置的值是 $m <br>");
};
$a = array(1, 2, 3, 4, 5);
$b = ['整型:1','整型:2','整型:3','整型:4','整型:5'];
var_dump(array_map($func,$a,$b));
輸出:
array(5) {
[0]=> string(55) "這個(gè)數(shù)組的第 1 個(gè)位置的值是 整型:1 "
[1]=> string(55) "這個(gè)數(shù)組的第 2 個(gè)位置的值是 整型:2 "
[2]=> string(55) "這個(gè)數(shù)組的第 3 個(gè)位置的值是 整型:3 "
[3]=> string(55) "這個(gè)數(shù)組的第 4 個(gè)位置的值是 整型:4 "
[4]=> string(55) "這個(gè)數(shù)組的第 5 個(gè)位置的值是 整型:5 "
}
注意第二個(gè)例子中的匿名函數(shù)里的語句必須使用雙引號,因?yàn)槠渲邪?n,$m兩個(gè)傳參髓介,而在PHP中惕鼓,雙引號內(nèi)的字符會被分析器進(jìn)行一遍解析,這樣才能將其中的參數(shù)代表的值解析出來唐础。
最后是從事數(shù)據(jù)開發(fā)時(shí)經(jīng)常會碰到的問題箱歧,本人是在laravel框架下進(jìn)行PHP開發(fā),在利用其中的數(shù)據(jù)模型取數(shù)據(jù)時(shí)會出現(xiàn)一種情況一膨,取出的數(shù)據(jù)是返回的對象類型(ObjClass)呀邢,此時(shí)是無法直接利用鍵取出某一數(shù)據(jù)的,此時(shí)一般采用的方法是利用json_decode()
方法豹绪,將其參數(shù)設(shè)為true時(shí)可返回?cái)?shù)組類型的數(shù)據(jù)价淌,但是此時(shí)返回的數(shù)組則是一個(gè)兩層次的數(shù)組,就像
$arr = array(
0 => array(
'id' => 11111
),
1 => array(
'id' => 22222
),
2 => array(
'id' => 33333
)
);
此時(shí)可以用foreach取出id,但是也可以用array_map()方法
$id_arr = array_map(function($v) {
return $v['id'];
}, $arr);
輸出:
array(3) {
[0]=> int(111)
[1]=> int(222)
[2]=> int(333) }
不過foreach遍歷數(shù)組也很快输钩,這兩種方法就是看個(gè)人意愿了