数组array的一些用法
array_filter
(PHP 4 >= 4.0.6, PHP 5, PHP 7) array_filter — 用回調(diào)函數(shù)過濾數(shù)組中的單元。(返回回調(diào)函數(shù)中返回true的元素,也就是過濾掉返回false的元素)
array_filter?(?array?$array?[,?callable?$callback?[,?int?$flag?=?0?]]?)?:?array參數(shù)
array: 要循環(huán)的數(shù)組
callback:使用的回調(diào)函數(shù)
如果沒有提供 callback 函數(shù), 將刪除 array 中所有等值為 FALSE 的條目。更多信息見轉(zhuǎn)換為布爾值。
flag: 決定callback接收的參數(shù)形式:
ARRAY_FILTER_USE_KEY - callback接受鍵名作為的唯一參數(shù)
ARRAY_FILTER_USE_BOTH -
返回值
返回過濾后的數(shù)組。
例子
使用回調(diào)函數(shù)時
獲取數(shù)組中的奇數(shù)偶數(shù)
//奇數(shù)function?odd($var){????//?returns?whether?the?input?integer?is?oddreturn($var?&?1); }//偶數(shù)function?even($var){????//?returns?whether?the?input?integer?is?evenreturn(!($var?&?1)); }$array1?=?array("a"=>1,?"b"=>2,?"c"=>3,?"d"=>4,?"e"=>5); $array2?=?array(6,?7,?8,?9,?10,?11,?12);echo?"Odd?:\n"; print_r(array_filter($array1,?"odd"));echo?"Even:\n"; print_r(array_filter($array2,?"even"));``采用位運(yùn)算, 1的二進(jìn)制比較特殊:最后一位偉1,其他位都為0,用位異或和1計算,由于1的其他位都是0,就看另外一個數(shù)的最后1位是0還是1,如果是0,則和1的最后一位&計算得到的0,否則是1。
和 1 進(jìn)行 & 運(yùn)算的巧用,因為1的除了最后一位是1外,其他位置都是0,所以任何一個數(shù)字和1進(jìn)行&運(yùn)算,結(jié)果只有2種,要么是1,要么是0,由進(jìn)行比較的數(shù)字的最后一位決定(由于1的其他位都是0,所以對位&計算后肯定是0)
不使用 callback 時的array_filter()
如果沒有提供 callback 函數(shù), 將刪除 array 中所有等值為 FALSE 的條目。
$entry?=?array(?????????????0?=>?'foo',?????????????1?=>?false,?????????????2?=>?-1,?????????????3?=>?null,?????????????4?=>?'');print_r(array_filter($entry));帶 flag 標(biāo)記的 array_filter()
$arr?=?['a'?=>?1,?'b'?=>?2,?'c'?=>?3,?'d'?=>?4];//只使用單個的鍵var_dump(array_filter($arr,?function($k)?{????return?$k?==?'b'; },?ARRAY_FILTER_USE_KEY));//是用數(shù)組的值和鍵var_dump(array_filter($arr,?function($v,?$k)?{????return?$k?==?'b'?||?$v?==?4; },?ARRAY_FILTER_USE_BOTH));如果不用 flag 參數(shù),并且function($v){},參數(shù)只有一個,是數(shù)組的值。所以回調(diào)函數(shù)中,可以單個使用key,單個使用value,同時使用key和value。
array_map
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
array_map — 為數(shù)組的每個元素應(yīng)用回調(diào)函數(shù)
array_map?(?callable?$callback?,?array?$array1?[,?array?$...?]?)?:?arrayarray_map():返回數(shù)組,是為 array1 每個元素應(yīng)用 callback函數(shù)之后的數(shù)組。 callback 函數(shù)形參的數(shù)量和傳給 array_map() 數(shù)組數(shù)量,兩者必須一樣
參數(shù)
callback:回調(diào)函數(shù),應(yīng)用到每個數(shù)組里的每個元素。
array1:數(shù)組,遍歷運(yùn)行 callback 函數(shù)。
... 數(shù)組列表,每個都遍歷運(yùn)行 callback 函數(shù)。
返回值
返回數(shù)組,包含 callback 函數(shù)處理之后 array1 的所有元素。
例子
單個數(shù)組
//全局函數(shù)function?cube($n){????return($n?*?$n?*?$n); } $a?=?array(1,?2,?3,?4,?5); $b?=?array_map("cube",?$a);//匿名函數(shù)$func?=?function($value)?{????return?$value?*?2; }; print_r(array_map($func,?range(1,?5)));使用更多的數(shù)組
function?show_Spanish($n,?$m){????return("The?number?$n?is?called?$m?in?Spanish"); }$a?=?array(1,?2,?3,?4,?5); $b?=?array("uno",?"dos",?"tres",?"cuatro",?"cinco");$c?=?array_map("show_Spanish",?$a,?$b); print_r($c);傳入兩個及以上的數(shù)組時,它們元素數(shù)量將會相同。因為回調(diào)函數(shù)會并行地處理相互對應(yīng)的元素。 如果幾個數(shù)組的元素數(shù)量不一致:空元素會擴(kuò)展短那個數(shù)組,直到長度和最長的數(shù)組一樣。
此函數(shù)有個有趣的用法:傳入 NULL 作為回調(diào)函數(shù)的名稱,將創(chuàng)建多維數(shù)組(一個數(shù)組,內(nèi)部包含數(shù)組。)
多維數(shù)組:創(chuàng)建數(shù)組,內(nèi)部包含數(shù)組
$a?=?array(1,?2,?3,?4,?5);$b?=?array("one",?"two",?"three",?"four",?"five");$c?=?array("uno",?"dos",?"tres",?"cuatro",?"cinco");$d?=?array_map(null,?$a,?$b,?$c);print_r($d);``以上例程會輸出:
Array([0]?=>?Array([0]?=>?1[1]?=>?one[2]?=>?uno)[1]?=>?Array([0]?=>?2[1]?=>?two[2]?=>?dos)[2]?=>?Array([0]?=>?3[1]?=>?three[2]?=>?tres)[3]?=>?Array([0]?=>?4[1]?=>?four[2]?=>?cuatro)[4]?=>?Array([0]?=>?5[1]?=>?five[2]?=>?cinco))如果僅傳入一個數(shù)組,鍵(key)會保留;傳入多個數(shù)組,鍵(key)是整型數(shù)字的序列。
array_map() 鍵(key)是 string
arr?=?array("stringkey"?=>?"value");function?cb1($a)?{????return?array?($a); }function?cb2($a,?$b)?{????return?array?($a,?$b); } var_dump(array_map("cb1",?$arr)); var_dump(array_map("cb2",?$arr,?$arr)); var_dump(array_map(null,??$arr)); var_dump(array_map(null,?$arr,?$arr));?>以上例程會輸出:
array(1)?{["stringkey"]=>??array(1)?{[0]=>string(5)?"value"} }array(1)?{[0]=>??array(2)?{[0]=>string(5)?"value"[1]=>string(5)?"value"} }array(1)?{["stringkey"]=>string(5)?"value"}array(1)?{[0]=>??array(2)?{[0]=>string(5)?"value"[1]=>string(5)?"value"} }轉(zhuǎn)載于:https://blog.51cto.com/14009535/2373005
總結(jié)
以上是生活随笔為你收集整理的数组array的一些用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。