关于array_walk()函数的使用疑惑
比如类中有一个方法叫做test(),在test方法中通过array_walk()进行递归,这个时候array_walk()的第二个参数应该怎么写?
例如:
function pmyoutput(&$a) {
if (is_array($a)) {
array_walk($a,'pmyoutput');
} else {
$a = stripslashes($a);
}
}
注释:
array_walk
(PHP 3>= 3.0.3, PHP 4 )
array_walk -- 对数组中的每个成员应用用户函数
说明
int array_walk ( array array, string func [, mixed userdata])
对 array 数组的每个单元应用用户自定义函数 func。数组中的值作为第一个参数,键名作为第二个参数传入 func 函数。如果提供了 userdata,将会被作为第三个参数传入用户函数。func 必须是一个用户自定义函数,而不能是 PHP 本来有的函数。因此不能在 array_walk() 中直接使用 str2lower(),必须先建立一个用户自定义函数,再把这个函数名当作参数传递进去。
注: 第二个参数函数名可以替换为一个数组,该数组由一个对象名和该对象名的一个方法名两个元素组成。
如果 func 需要超过两个或三个参数(根据 userdata),每次 array_walk() 调用 func 都会产生一个警告。这些警告可以通过在 array_walk() 调用的前面加上“@”符号来抑制住,或者通过 error_reporting()。
注: 如果 func 需要直接作用于数组中的值,则 func 定义中的第一个参数应该用引用传递。这样任何对这些单元的改变也将会改变数组本身。
在 func 中修改数组可能会产生不可预知的行为。
注: 将键名和 userdata 传递到 func 中是 PHP 4.0 新增加的。
在 PHP 4 中需要调用 reset(),因为 array_walk() 默认不会重置数组。
用户最好不要在回调函数中修改数组本身。例如添加/删除单元,unset array_walk() 正在作用的数组。如果数组改变了,本函数的行为没有定义。