2011-06-01 56 views
1
$origarray1 = array(2.4, 2.6, 3.5); 
$origarray2 = array(2.4, 2.6, 3.5); 

print_r(array_map('floor', $origarray1)); //$origarray1 stays the same 

//changes $origarray2 
function callback_array_walk(&$v, $k) { $v = floor($v); } 
array_walk($origarray2, callback_array_walk(&$v, $k)); 
print_r($origarray2); 

//this is a more proper use of array_walk 
function callback_array_walk2($v, $k) { echo "$k => $v", "\n"; } 
array_walk($origarray1, callback_array_walk2($v, $k)); 

//array_map accepts several arrays 
function callback_arraymap($a, $b) { return $a * $b; } 
print_r(array_map(callback_arraymap($a, $b), $origarray1, $origarray2)); 

//select only elements that are > 2.5 
function callback_array_filter($a) { return $a > 2.5; } 
print_r(array_filter($origarray1,callback_array_filter($a))); 

我這裏的錯誤array_filter,array_map,array_walk,調用,傳遞參數,返回?

array_walk()[function.array步行]:對於函數名語法錯誤中....

我誤解了這三種類型的內容(使用,通話,傳球)?

回答

1

嘗試通過回調函數,以array_walk作爲字符串不帶任何參數:

function callback_array_walk(&$v, $k) { $v = floor($v); } 
array_walk($origarray2, 'callback_array_walk'); 
         ^^^^^^^^^^^^^^^^^^^^^ 

類似地,對於array_maparray_filter功能通過回調函數爲字符串。

1

你只是傳遞迴調的功能的名稱:

array_walk($origarray2, 'callback_array_walk');