加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:39:10 所属栏目:PHP教程 来源:网络整理
导读:有没有办法让这段代码在没有警告的情况下工作? 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'
有没有办法让这段代码在没有警告的情况下工作?
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_toindex.php
on line 7

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

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

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

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'));

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

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

both are valid.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读