当前代码:
<?php
// See the AND operator; How do I simplify/shorten this line?
if( $some_variable !== 'uk' && $some_variable !== 'in' ) {
// Do something
}
?>
和
<?php
// See the OR operator; How do I simplify/shorten this line?
if( $some_variable !== 'uk' || $some_variable !== 'in' ) {
// Do something else
}
?>
是否有更简单(即更短)的方式来编写这两个条件?
注意:是的,它们不同,我希望有不同的方法来缩短代码。
答案 0 :(得分:97)
对于您的第一个代码,您可以使用the answer given by
@ShankarDamodaran对in_array()
进行简短的更改:
if ( !in_array($some_variable, array('uk','in'), true ) ) {
@porty在评论中指出,自PHP 5.4起可用<{1>或更短的[]
符号
if ( !in_array($some_variable, ['uk','in'], true ) ) {
与:
相同if ( $some_variable !== 'uk' && $some_variable !== 'in' ) {
......但更短。特别是如果你比较'uk'和'in'更多。 我没有使用额外的变量( Shankar使用$ os ),而是在if语句中定义数组。有些人可能会觉得很脏,我发现它很快又整洁:D
你的第二个代码的问题在于它可以很容易地用TRUE进行交换,因为:
if (true) {
等于
if ( $some_variable !== 'uk' || $some_variable !== 'in' ) {
你问的是字符串的值是不是A还是不是B.如果它是A,它肯定不是B,如果它是B,它肯定不是A.如果它是C或字面上的其他任何东西,它也不是A而不是B.因此该声明始终(未考虑schrödingers法则)返回true。
答案 1 :(得分:15)
您可以在PHP中使用in_array()
。
$os = array("uk", "us"); // You can set multiple check conditions here
if (in_array("uk", $os)) //Founds a match !
{
echo "Got you";
}
答案 2 :(得分:1)
如果您计划在if语句中构建函数,我还建议使用in_array。它更清洁了。
如果您尝试为变量赋值,可以使用if / else简写:
$variable_to_fill = $some_variable !== 'uk' ? false : true;
答案 3 :(得分:1)
您需要进行多值检查。请尝试使用以下代码:
<?php
$illstack=array(...............);
$val=array('uk','bn','in');
if(count(array_intersect($illstack,$val))===count($val)){ // all of $val is in $illstack}
?>
答案 4 :(得分:1)
尤其是在多次进行此测试并且您正在运行PHP 7+并且安装了Set
类的情况下,另一种可能有意义的选择是:
use Ds\Set;
$strings = new Set(['uk', 'in']);
if (!$strings->contains($some_variable)) {
或者在任何版本的PHP上,您都可以使用关联数组来模拟集合:
$strings = ['uk' => 1, 'in' => 1];
if (!isset($strings[$some_variable])) {
创建集合时会产生额外的开销,但是每个测试随后都会成为O(1)操作。当然,所比较的字符串列表越长,节省的费用就越大。
答案 5 :(得分:0)
一些基本的正则表达式可以很好地解决$some_variable !== 'uk' && $some_variable !== 'in':
if(!preg_match('/^uk|in$/', $some_variable)) {
// Do something
}
答案 6 :(得分:0)
您可能会更容易理解颠倒逻辑并使用带有空if的else语句。
if($some_variable === 'uk' || $another_variable === 'in'){}
else {
// This occurs when neither of the above are true
}