目錄
1、foreach
2、array_map
3、array_walk
4、for
5、each
6、reset
在PHP的日常操作中,數(shù)組是最常出現(xiàn)的結(jié)構(gòu),而我們幾乎每天都在處理數(shù)組相關(guān)的內(nèi)容。那么問(wèn)題來(lái)了,你一般怎么遍歷并處理數(shù)組。
1、foreach很熟悉吧,是不是你的最愛(ài)?
$arr?=?['a',?'b',?'c']; foreach?($arr?as?$key?=>?$value)?{ ????$arr[$key]?=?$value?.?'_i'; } print_r($arr);?//?['a_i',?'b_i',?'c_i'];2、array_map
使用匿名函數(shù)的方式,處理數(shù)組里的每個(gè)元素。遍歷完成后返回一個(gè)新的數(shù)組
$arr?=?['a',?'b',?'c']; $arr?=?array_map(function?($item)?{ ????return?$item?.?'_i'; },?$arr); print_r($arr);?//?['a_i',?'b_i',?'c_i'];
你可以同時(shí)處理多個(gè)數(shù)組
$arr_1?=?['a',?'b',?'c']; $arr_2?=?['你',?'好',?'嗎',?'原',?'罪']; //?$arr_n?=?[...]; $arr?=?array_map(function?($item_1,?$item_2)?{ ????return?$item_1?.?'_'?.?$item_2?.?'_i'; },?$arr_1,?$arr_2); print_r($arr);?//?['a_你_i',?'b_好_i',?'c_嗎_i',?'_原_i',?'_罪_i']
是的,遍歷的次數(shù)以最長(zhǎng)的數(shù)組為準(zhǔn)。
遍歷3次之后,$arr_1 其實(shí)是完成了的,所以之后 $item_1 的值都是null3、array_walk
以引用傳遞的形式遍歷你的數(shù)組,沒(méi)有返回值,而且只能處理一個(gè)數(shù)組。
$arr?=?['a',?'b',?'c']; array_walk($arr,?function?(&$item)?{ ????$item?=?$item?.?'_i'; }); print_r($arr);?//?['a_i',?'b_i',?'c_i'];
注意到 &$item 了嗎,是的,多了個(gè)&,代表著你的形參是以引用傳遞接收數(shù)據(jù)的。你要做的就是想辦法改變這個(gè)參數(shù)。
假如你處理的是二維數(shù)組,處理方式也是萬(wàn)變不離其宗的。
$arr?=?[ ????['name'?=>?'a'], ????['name'?=>?'b'], ????['name'?=>?'c'] ]; array_walk($arr,?function?(&$item)?{ ????$item['name']?=?$item['name']?.?'_i'; }); print_r($arr);?//?[['name'?=>?'a_i'],?['name'?=>?'b_i'],?['name'?=>?'c_i']];4、for
這應(yīng)該是超級(jí)通用的語(yǔ)法了
$arr?=?['a',?'b',?'c']; for?($i?=?0;?$i?不推薦使用。它的效率比不上foreach。而且寫(xiě)法上比f(wàn)oreach略繁瑣。
5、each哈哈,這個(gè)函數(shù)在PHP7.2已經(jīng)被廢棄了@deprecated,而且感覺(jué)特別古老的書(shū)寫(xiě)方式。這種寫(xiě)法的執(zhí)行效率也不行,新手應(yīng)該直接放棄。
$arr?=?['a',?'b',?'c']; while?(list($key,?$value)?=?each($arr))?{ ????$arr[$key]?=?$value?.?'_i'; } print_r($arr);?//?['a_i',?'b_i',?'c_i'];6、reset準(zhǔn)確的講并不止reset一個(gè)函數(shù),需要組合多個(gè)內(nèi)置函數(shù),平常寫(xiě)代碼基本是用不上的
$arr?=?['a',?'b',?'c']; //?reset()?指針切換到頭部,其實(shí)默認(rèn)就是指向開(kāi)頭,可以忽略這句 reset($arr); //?current()?獲取當(dāng)前指針的元素值 while?($value?=?current($arr))?{ ????//?key()?獲取當(dāng)前指針的元素下標(biāo) ????$arr[key($arr)]?=?$value?.?'_i'; ????//?next()?指針移到下一個(gè) ????next($arr); } print_r($arr);?//?['a_i',?'b_i',?'c_i'];總結(jié)到此這篇關(guān)于PHP遍歷數(shù)組的6種方式的文章就介紹到這了,希望大家以后多多支持好二三四!