有没有办法让这段代码在没有警告的情况下工作?
function myFunction($value,$key,&$array) { if (strlen($value)<=2) $array[] = $key.$value; } $a = array("aa","bbb","cc","dd"); $resultA = array(); array_walk($a,'myFunction',&$resultA); // now '$resultA' should contain: Array([0] => aa0 [1] => cc2 [2] => dd3)
它工作,但它总是抛出此警告消息:
Warning: Call-time pass-by-reference
has been deprecated in
path_to\index.PHP
on line 7
我认为从呼叫中删除&符号应该足以使警告消失,但是,奇怪的是,如果我只指定&,则“array_walk”不会形成第三个参数.在“myFunction”中.为了使它工作,必须有一个&在通话中,但它会触发警告.
此外,作为一个临时解决方法,我试图将PHP.ini var“allow_call_time_pass_reference”设置为true,但我仍然收到警告……
array_walk的第三个参数不是通过引用传递的,因此不会起作用.
您可以使用对象方法作为回调而不是函数,并将结果累积到对象中.
原文链接:https://www.f2er.com/php/133177.html您可以使用对象方法作为回调而不是函数,并将结果累积到对象中.
Class myClass { public values; public function myCallback($value,$key) { if (strlen($value)<=2){ $this->values[] = $key.$value; } } } $a = array("aa","dd"); $obj = new myClass(); array_walk($a,array($obj,'myCallback'));
或者你可以在回调函数中定义一个全局.
function myFunction($value,$key) { global $array; if (strlen($value)<=2) $array[] = $key.$value; }