好的,我相信我可以简化这行代码,除了我在网上找不到任何东西。任何人都可以帮助我吗?
if(empty($action) || $action == "a" || $action == "b" || $action == "c") {
}
谢谢!
答案 0 :(得分:7)
您可以使用in_array()
搜索$action
的可能值数组:
if (empty($action) || in_array($action, array('a', 'b', 'c'))) {
}
我将empty()
条件分开,因为除了空字符串empty()
之外,''
对于许多内容测试为true。
如果您只关心测试空字符串,可以将其包含在in_array()
中,并删除empty()
:
if (in_array($action, array('', 'a', 'b', 'c'))) {
}
由于short-circuiting,我认为明确地包括empty()
明显更好一点。
答案 1 :(得分:1)
$options = array("a", "b", "c");
if (empty($action) || in_array($action, $options) ) {
}
答案 2 :(得分:1)
我建议你不要简化这段代码,因为你可能会获得某种可读性,但是你也会增加计算时间。而且我更愿意提高可读性(代码执行的频率远远超过纯文本阅读)。
为什么?
只有or
个连词组成的像你这样的表达式才会在找到第一个'true'值时结束。因此,在最好的情况下,PHP将仅使用empty($action)
评估true
并保留if-header而不评估所有其他部分。在最坏的情况下,它将检查每个部分直到结束。因此,平均而言 - 如果没有进一步了解您将检查的数据 - 您正在运行并计算if-header的一半。
但是如果你使用in_array($action, array('a', 'b', 'c'))
之类的东西,那么你将用所有元素构造整个数组并在其中搜索。因此,您的PHP解释器必须创建所有元素和数组,以匹配第一个元素之一。无论如何,这比你当前的线还要多。
所以请先考虑一下readabilty与代码复杂性。
答案 3 :(得分:0)
if (empty($action) || preg_match('/^[abc]$/', $action)) { ... }
需要 修改: empty($action)
才允许false
,array()
,0
和null
通过不想要。