您还可以将回调的参数作为 array_walk 的第三个参数传递。问题是如何将引用作为回调参数传递。这在调用 array_walk 时使用 & 前缀是可能的。这已被弃用,随后被定为非法。使用引用类型的第三个参数定义回调在这里没有帮助。
一种解决方法是在数组中传递一个引用(&$var 允许作为 'array' 的参数!)作为第三个参数,并在回调中取消引用数组以再次获取引用,如下所示:
function cb(&$v, $k, $ar) {
$v='bla'.$k;
$ar[0]++;
}
$count=0;
$arr = array('sint'=>'er','kla'=>'aas','en'=>'zwartepiet');
array_walk($arr,'cb',array(&$count));
var_dump($arr,$count);
哪个打印:
array(3) {
["sint"]=>
string(7) "blasint"
["kla"]=>
string(6) "blakla"
["en"]=>
string(5) "blaen"
}
int(3)
当仍然允许调用时引用时,它曾经是可能的:
function cb(&$v, $k, $ref) {
$v='bla'.$k;
$ref++;
}
$count=0;
$arr = array('sint'=>'er','kla'=>'aas','en'=>'zwartepiet');
array_walk($arr,'cb',&$count);
var_dump($arr,$count);