2014-09-04 90 views
1

下面的代码传递...严格的标准:只有变量应参照地渡过阵列

$msgArr = split("\n", $message); 
$newMsg = ""; 
foreach ($msgArr as $msg){ 
    if (trim(end(split(":", $msg))) != '') 
     $newMsg .= $msg . "\r\n"; 
} 

似乎产生错误:严格的标准:只有变量应参考在传递的/ home/siteurl/public_html/questionnaire/full_questionnaire_submitted.php on line 1033

任何想法为什么这样?

非常感谢提前。

回答

2

遵循严格的标准,您只应将变量传递给end()而不是直接返回函数的值。这是因为end()通过引用消耗它的参数。 (请@ NiettheDarkAbsol的很好的解释)

这条线:

if (trim(end(split(":", $msg))) != '') 

应该是:

$pieces = split(":", $msg); 
if (trim(end($pieces)) !== '') 
+0

解决了我的问题!非常感谢。 – user2091936 2014-09-04 15:24:58

+0

欢迎您! – hek2mgl 2014-09-04 15:39:21

1

最终的功能移到你传递作为参数数组的指针,你的情况,你通过分裂的归来,女巫不能通过引用传递。

1

end()具有以下特征:

mixed end (array &$array) 

因此,需要参考作为它的参数。引用通过指向变量来工作,而不是复制变量的值(通常情况下是这样),这意味着您不能直接将函数的返回值传递给它,因此会导致错误。

PHP已被编程为优雅地处理这种事情,因为它是创建一个内部临时变量的简单事情,因此它将继续工作,但您将得到严格标准错误。

既然你想从最后:到字符串末尾修剪文本,可以考虑:

$lastpiece = trim(substr(strrchr($msg,":"),1)); 

这使用strrchr得到一切从最后:到最后,substr歇工那最后:,最后trim明明。

+0

很好的答案! .. – hek2mgl 2014-09-04 14:00:32