PHP學(xué)習(xí)筆記--array_map函數(shù)

在這介紹一個(gè)PHP語言里比較常用的數(shù)組操作函數(shù),array_map函數(shù),當(dāng)我第一次接觸到這個(gè)函數(shù)時(shí),對(duì)這個(gè)函數(shù)的強(qiáng)大功能所震懾,也越發(fā)感覺PHP語言的好玩之處。

說明

了解PHP函數(shù)的最好的去處就是PHP手冊(cè),PHP手冊(cè)上的關(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ù)作用后存儲(chǔ)進(jìn)一個(gè)新的數(shù)組作為新數(shù)組的對(duì)應(yīng)單元的值
而還有個(gè)厲害的地方是這個(gè)函數(shù)可以傳入多個(gè)數(shù)組,也就是在你定義的回調(diào)函數(shù)中可以同時(shí)對(duì)多個(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ù)里的語句必須使用雙引號(hào),因?yàn)槠渲邪?n,$m兩個(gè)傳參,而在PHP中,雙引號(hào)內(nèi)的字符會(huì)被分析器進(jìn)行一遍解析,這樣才能將其中的參數(shù)代表的值解析出來。

最后是從事數(shù)據(jù)開發(fā)時(shí)經(jīng)常會(huì)碰到的問題,本人是在laravel框架下進(jìn)行PHP開發(fā),在利用其中的數(shù)據(jù)模型取數(shù)據(jù)時(shí)會(huì)出現(xiàn)一種情況,取出的數(shù)據(jù)是返回的對(duì)象類型(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è)人意愿了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容