检查 IF 语句中的多个变量是否都等于相同值的速记方法是什么?(菲律宾比索)

2022-08-30 22:48:51

有没有编写以下代码的速记方法?

if (($tstat=='no_prices')&&($l1stat=='no_prices')&&($l2stat=='no_prices')&&($l3stat=='no_prices'))
{                                   
    //do something
}

我尝试使用以下代码,但是当其中一个变量不等于“no_prices”时,它做了一些事情。

if (($tstat && $l1stat && $l2stat && $l3stat)=='no_prices')
{
    //do something
}

为了检查字符串是否不会导致问题,我尝试用0代替“no_prices”,用1代替其他值,但结果是相同的。


答案 1

array_fliparray_unique快几倍:

function all_equal($arr, $value) {
  return array_keys(array_flip($arr)) == array($value);
}

$arr = array($tstat, $l1stat, $l2stat, $l3stat);

echo all_equal($arr, 'no_prices');

到目前为止给出的答案的快速配置文件,对于数组长度为1000的1000次迭代:

  array_flip: 0.07321620 seconds
array_unique: 0.32569408 seconds
     foreach: 0.15136194 seconds
array_filter: 0.41404295 seconds

用于分析的代码如下:http://codepad.org/szgNfWHe

注意:正如@cypherabe正确地指出的那样,在数组至少有 5 个元素之前不会超量,在数组至少有 10 个元素之前不会超量。array_fliparray_uniqueforeach


答案 2

除非我弄错了,否则没有本地方法来做到这一点。如果这是您必须经常检查的内容,请尝试为其使用自定义函数,例如:

function allEquals($chkstr, $vals) {
    if (!is_array($vals)) { die('allEquals() $vals not an array'); }
    foreach ($vals AS $v) {
        if ($chkstr != $v) { return false; }
    }
    return true;
}

推荐