array_filter,array_map,array_walk,call,pass参数,return?

时间:2011-06-01 13:47:31

标签: php arrays

$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_walk()[function.array-walk]:函数名的语法错误....

我误解了这三种类型(使用,呼叫,传递)?

2 个答案:

答案 0 :(得分:1)

尝试将回调函数作为字符串传递给array_walk,不带任何参数:

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

类似地,array_maparray_filter函数将回调函数作为字符串传递。

答案 1 :(得分:1)

您只需将回调作为函数的名称传递

array_walk($origarray2, 'callback_array_walk');