array_walk の 3 番目のパラメーターとして、コールバックの引数を渡すこともできます。問題は、参照をコールバック引数として渡す方法です。これは、array_walk を呼び出すときに & プレフィックスを使用することで可能でした。これは推奨されておらず、その後違法とされています。参照型の 3 番目のパラメーターを使用してコールバックを定義しても、ここでは役に立ちません。
回避策として、配列内の参照を 3 番目の引数として渡し (&$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);