在PHP array_walk中传递引用第三个参数,没有警告

前端之家收集整理的这篇文章主要介绍了在PHP array_walk中传递引用第三个参数,没有警告前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法让这段代码在没有警告的情况下工作?
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)

它工作,但它总是抛出此警告消息:@H_404_4@

Warning: Call-time pass-by-reference
has been deprecated in
path_to\index.PHP
on line 7@H_404_4@

我认为从呼叫中删除&符号应该足以使警告消失,但是,奇怪的是,如果我只指定&,则“array_walk”不会形成第三个参数.在“myFunction”中.为了使它工作,必须有一个&在通话中,但它会触发警告.@H_404_4@

此外,作为一个临时解决方法,我试图将PHP.ini var“allow_call_time_pass_reference”设置为true,但我仍然收到警告……@H_404_4@

我想知道可能有更好/首选的方法用户定义的函数应用于带有传递引用参数的数组的每个元素.@H_404_4@

array_walk的第三个参数不是通过引用传递的,因此不会起作用.
您可以使用对象方法作为回调而不是函数,并将结果累积到对象中.
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'));

或者你可以在回调函数中定义一个全局.@H_404_4@

function myFunction($value,$key)
{
   global $array;    
   if (strlen($value)<=2) $array[] = $key.$value;
}

both are valid.@H_404_4@

原文链接:https://www.f2er.com/php/133177.html

猜你在找的PHP相关文章