为什么我必须将PHP的end()数组函数的结果赋给变量来操作结果?
题
我试图删除数组中可能为空的最后一个条目,如下所示,但是我收到错误:“不能在写入上下文中使用函数返回值”:
if (empty(end($crontabEntryList))) {
array_pop($crontabEntryList);
}
如果我首先将end的返回值赋给变量(如底部),我可以删除最后一个条目,如果为空。根据 end()的手动输入,它返回最后一个元素的值或FALSE为空。阵列"通过谷歌搜索我发现可能的解释:布尔值不是“可写的”。
然而,在我的特定情况下,似乎会返回此错误,并且可能其他文件记录在SO 上,仅仅是因为可能可以返回一个布尔值。因为,我的实例中的数组肯定是不为空,因此而不是false,end()“返回最后一个元素的值”。
我的假设是否正确?在这种情况下,这是不是与PHP的松散类型性质不一致?或者是因为数组的最后一个元素是“不可写”?在这种情况下,究竟是什么构成了“写上下文”。用PHP?
$last = end($crontabEntryList);
if (empty($last)) {
array_pop($crontabEntryList);
}
解决方案
这与end()或“writability”无关。布尔人。
empty()
和 isset()
不是函数,它们是语言结构。
从 empty()
的文档:
注意:empty()仅将变量检查为 其他任何东西都会导致解析 错误。换句话说,以下 不起作用:空(修剪($ name))。
再次:只有变量可以传递给 empty()
。
其他提示
empty()很奇怪。我刚学会接受它并尽可能地解决它(使用你提供的解决方案)。
如果您只想尝试清除数组中的空值,请尝试 array_filter()
我可以建议对end()的返回值使用否定检查吗?在我看来,end()要么返回最后一个元素的值,要么返回FALSE(如果为空)。因此,不要使用额外的代码来创建另一个用空测试的变量,而只需测试end()的返回值:
/* Edited */
if(!(trim(end($crontabEntryList)))) {
array_pop($crontabEntryList);
}
我已经在我的系统上使用一系列字符串测试了它,它似乎有你想要的效果。
不隶属于 StackOverflow