所以,正如标题所说......任何替代方案:
$valid_times = array('ever', 'today', 'week', 'month');
if (($this->_time == 'ever') OR ($this->_time == 'day'))
OR
if (in_array($this->_time, $valid_times))
...
注意:我知道上面提到的工作,但我只是在寻找新的东西来学习和试验
感谢您提供的信息,但我没有提到switch()
作为替代方案,因为我的代码并非如此。它必须是一个if语句,我想知道是否存在类似的东西:
if($this->_time == (('ever') OR ('day') OR ('month')))
你怎么看?如果上面提到的话,这将是第一个更短的方式
答案 0 :(得分:2)
[编辑]删除原始答案,因为您现在已指定不想使用switch
。
在您更新的问题中,您询问是否可以执行此类操作:
if($this->_time == (('ever') OR ('day') OR ('month')))
直接答案是'不,不是PHP'。你得到的最接近的是in_array()
,数组值在同一行代码中就位了:
if(in_array($this->_time, array('ever','day','month'))
PHP 5.4有一个更新允许更短的数组语法,这意味着你可以删除单词array
,这使它更具可读性:
if(in_array($this->_time, ['ever','day','month'])
但它仍然是in_array()
电话。你无法解决这个问题。
答案 1 :(得分:2)
我能想到实现这一目标的唯一选择就是使用正则表达式。
$valid_times = array('ever','day','week','hour');
if(preg_match('/' . implode('|', $valid_times) . '/i', $this->_time)){
// match found
} else {
// match not found
}
答案 2 :(得分:2)
怎么样?
$a1 = array("one","two","three");
$found = "two";
$notFound = "four";
if (count(array_diff($a1,array($found))) != count($a1))
/* Found */
你可以使用
$found = array("one","three");
if (count(array_diff($a1,$found)) != count($a1));
/* Either one OR three */
答案 3 :(得分:1)
对于in_array有时会这样吗?
$arr = array(1, 2, 'test');
$myVar = 2;
function my_in_array($val, $arr){
foreach($arr as $arrVal){
if($arrVal == $val){
return true;
}
}
return false;
}
if(my_in_array($myVar, $arr)){
echo 'Found!';
}
答案 4 :(得分:1)
康复,但它是另类
$input = 'day';
$validValues = array('ever','day');
$result = array_reduce($validValues,
function($retVal,$testValue) use($input) {
return $retVal || ($testValue == $input);
},
FALSE
);
var_dump($result);
答案 5 :(得分:0)
您也可以使用switch语句。
switch ($this->_time) {
case 'ever':
case 'day':
//code
break;
default:
//something else
}
答案 6 :(得分:0)
为了科学起见,事实证明您可以在三元运算符中使用yield
,因此您可以在匿名生成器中放入一些复杂的求值,并将其产生于第一个求值为true的值,无需对它们全部进行评估:
$time = 'today';
if( (function()use($time){
$time == 'ever' ? yield true:null;
$time == 'today' ? yield true:null;
$time == 't'.'o'.'d'.'a'.'y' ? yield true:null;
})()->current() ){
echo 'valid';
}
在这种情况下,它将回显'valid'
而无需评估连接。