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