Php 严格标准:在遍历数组时,只能通过引用传递变量

Php 严格标准:在遍历数组时,只能通过引用传递变量,php,Php,下面的代码 $msgArr = split("\n", $message); $newMsg = ""; foreach ($msgArr as $msg){ if (trim(end(split(":", $msg))) != '') $newMsg .= $msg . "\r\n"; } 似乎产生了错误:严格的标准:只有变量应该在第1033行的/home/siteurl/public_html/inventory/full_inventory_submitted.p

下面的代码

$msgArr = split("\n", $message);
$newMsg = "";
foreach ($msgArr as $msg){
    if (trim(end(split(":", $msg))) != '')
        $newMsg .= $msg . "\r\n";
}
似乎产生了错误:严格的标准:只有变量应该在第1033行的/home/siteurl/public_html/inventory/full_inventory_submitted.php中通过引用传递

你知道为什么吗


非常感谢。

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

这一行:

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

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

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

这一行:

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

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

end函数移动您作为参数传递的数组的光标,如果您传递了拆分返回,则无法通过引用传递。

end函数移动您作为参数传递的数组的光标,如果您传递了拆分返回,则无法通过引用传递。

具有以下签名:

mixed end ( array &$array )
所以它以一个引用作为它的参数。引用的工作方式是指向变量,而不是复制变量的值(通常情况下是这样),这意味着您无法直接将函数的返回值传递给它,因此会出现错误

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

由于要获取从最后一个
到字符串末尾的修剪文本,请考虑:

$lastpiece = trim(substr(strrchr($msg,":"),1));
这用于获取从最后一个
到最后一个
substr
的所有内容,在最后一个
修剪
之前取消最后一个

具有以下签名:

mixed end ( array &$array )
所以它以一个引用作为它的参数。引用的工作方式是指向变量,而不是复制变量的值(通常情况下是这样),这意味着您无法直接将函数的返回值传递给它,因此会出现错误

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

由于要获取从最后一个
到字符串末尾的修剪文本,请考虑:

$lastpiece = trim(substr(strrchr($msg,":"),1));
这用于获取从最后一个
到最后一个
substr
的所有内容,在最后一个
修剪
之前删除最后一个