首頁 >後端開發 >php教程 >淺析php中array_map和array_walk的使用對比

淺析php中array_map和array_walk的使用對比

高洛峰
高洛峰原創
2016-12-12 09:49:371416瀏覽

一、array_map()

     1、array_map() 函數將使用者自訂函數作用到陣列中的每個值上,並傳回使用者自訂函數作用後的帶有新值的陣列,若函數作用後無回傳值,則對應的新值數組中為空。 

     2、回呼函數所接受的參數數量應且傳遞至 array_map() 函數的陣列數一致。 

     3、提示:您可以輸入函數一個或多個陣列。

            若相函數輸入2個陣列,其函數接受參數也應該有兩個,map給函數傳值時,是每次從兩個陣列中分別取一個傳給函
數。也就是多個陣列之間是同步提交的,不是提交完一個陣列再提交下一個提交幾個數組,則函數也需要有幾個參數

     4、語法: array array_map ( callable callback,arrayarr1 [, array $ … ] )

實例:

<?php
//单数组形式
function myfunction($v)
{
 if ($v==="Dog")
 {
  return "Fido";
 }
 return $v;
}
 
$a=array("Horse","Dog","Cat");
print_r(array_map("myfunction",$a));
 
//多数组形式
function myfunction1($v1,$v2)
{
 if ($v1===$v2)
 {
  return "same";
 }
 return "different";
}
 
$a1=array("Horse","Dog","Cat");
$a2=array("Cow","Dog","Rat");
print_r(array_map("myfunction1",$a1,$a2));
?>

   

二、array_walk()

    、文法: bool array_walk ( array &array,callablefuncname [, mixed $userdata = NULL ] )

參數:

 $array     輸入的陣列。

 $funcname  回呼函數,典型情況下 $funcname 接受兩個參數。 $array 參數的值作為第一個, 鍵名作為第二個。

 $userdata  如果提供了可選參數 $userdata ,將會作為第三個參數傳遞給 $funcname。

注意:

如果 $funcname 需要直接作用於數組中的值,則給 funcname 的第一個參數指定為引用(添加&符號)。這樣

任何對這些單元的改變也會改變原始數組本身。

回傳值 :

成功時回傳 TRUE, 或失敗時回傳 FALSE。

實例:

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
//传引用,改变了所传参数组
function test_alter(&$item1, $key, $prefix)
{
 $item1 = "$prefix: $item1";
}
 
function test_print($item2, $key)
{
 echo "$key. $item2<br />\n";
}
 
echo "Before ...:\n";
//单数组
array_walk($fruits, &#39;test_print&#39;);
 
//带额外参数
array_walk($fruits, &#39;test_alter&#39;, &#39;fruit&#39;);
echo "... and after:\n";
 
array_walk($fruits, &#39;test_print&#39;);

   

以上程式會輸出:

Before ...:
d. lemon
a. orange
b. banana
c. apple
 ... and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: apple

   

關鍵點

 walk   主要是使用每個參數一次你的回呼函數,要的是處理的過程。


 walk   可以認為提供額外參數給回調函數,map不可以


 walk   主要是要對陣列內的每個值進行操作,操作結果影響原廠的陣列

進行操作後回傳數組,以獲得新數組


 walk   可以沒有回值map要有,因為要填入數組


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn