PHP:數組操作函數array_walk()和array_map()

來源:互聯網
上載者:User
array_map()的函數原型為:array array_map ( callback callback, array arr1 [, array...] )

array_map() 返回一個數組,該數組包含了arr1中的所有單元經過callback作用過之後的單元。callback接受的參數數目應該和傳遞給 array_map() 函數的數組數目一致。

callback函數就是array_map所將調用來處理元素單元函數,應以字串的形式將函數名傳遞給array_map()

如:(php官方手冊所給出的代碼)

function cube($n)
{
return($n * $n *$n);
}

$a = array(1,2, 3, 4, 5);
$b= array_map("cube",$a);
print_r($b);
?>

cube即為callback函數 ,且array_map的callback函數的參數每一個應均為數組的元素,也就是array_map()除了第一個參數外,其餘參數應均為數組且應與回呼函數的參數個數一樣.

100){return  $n-10;}else {return  $n;}}//callback 2function  add($a,$b){return  $a+$b;}$arr = array(101,85,35,105,99,109);//var_dump($arr);$brr = array(1,2,3,4,5,6);$arr = array_map("check", $arr);$brr = array_map("add", $arr,$brr);print_r($arr);echo "
";print_r($brr);?>

輸出結果

array (size=6)  0 => int 101  1 => int 85  2 => int 35  3 => int 105  4 => int 99  5 => int 109

Array ( [0] => 91 [1] => 85 [2] => 35 [3] => 95 [4] => 99 [5] => 99 )
Array ( [0] => 92 [1] => 87 [2] => 38 [3] => 99 [4] => 104 [5] => 105 )

========================================================================================

我是分割線

========================================================================================


與array_map()不同array_walk()的傳回值是布爾型,也就是如果想要修改數組的資料,應該在callback函數上做手腳(也就是引用)

array_walk()會將數組的元素的值,以及索引值傳遞給callback函數,此外還允許傳遞其類型的資料給callback函數.

以下為其原型以及官方文檔:

bool array_walk ( array &array, callback funcname [,mixed userdata] )

如果成功則返回 TRUE,失敗則返回 FALSE

將使用者自訂函數funcname應用到array數組中的每個單元。典型情況下funcname接受兩個參數。array參數的值作為第一個,鍵名作為第二個。如果提供了選擇性參數userdata,將被作為第三個參數傳遞給 callbackfuncname。

如果funcname函數需要的參數比給出的多,則每次 array_walk() 調用funcname時都會產生一個E_WARNING 級的錯誤。這些警告可以通過在 array_walk() 調用前加上 PHP 的錯誤操作符 @ 來抑制,或者用 error_reporting()

注: 如果funcname需要直接作用於數組中的值,則給funcname的第一個參數指定為引用。這樣任何對這些單元的改變也將會改變原始數組本身。

注: 將鍵名和 userdata 傳遞到funcname中是 PHP 4.0新增加的。

array_walk() 不會受到array內部數組指標的影響。array_walk() 會遍曆整個數組而不管指標的位置。

使用者不應在回呼函數中改變該數組本身。例如增加/刪除單元,unset 單元等等。如果 array_walk() 作用的數組改變了,則此函數的的行為未經定義,且不可預期。

以下是我自己寫的一個簡單的例子:

';}$arr = array("a"=>"A","b"=>"B","c"=>"C","d"=>"D");//array_walk -- 對數組中的每個成員應用使用者函數//函數原型:bool array_walk ( array &array, callback funcname [, mixed userdata] )//第一個參數為 數組//第二個參數為 callback函數名,//第三個參數為 選擇性參數(將傳遞給所callback的函數)//==============================================================================//array_map()將傳遞callback 函數的 的//第一個參數是元素的值,如需修改則應加上 &操作符//第二個參數為索引值,如需修改則作如上處理//第三個參數為使用者自己傳遞給函數的資料(即array_walk()中的第三個參數)array_walk($arr,'alter',".is.");?>

輸出
a.is.A
b.is.B
c.is.C
d.is.D

----------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------




  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.