【问题标题】:Compare multiple values in PHP比较PHP中的多个值
【发布时间】:2011-05-05 14:49:16
【问题描述】:

我想从这里开始:

if($var == 3 || $var == 4 || $var == 5 || $var =='string' || $var == '2010-05-16') {
   // execute code here
}

到这里:

if($var == (3, 4, 5, 'string', '2010-05-16')) { // execute code here }

继续输入$var 似乎很多余,而且我发现它阅读起来有点麻烦。 PHP中有没有办法以这种方式简化它?我在这里读到一篇文章,当使用 XQuery 时,您可以使用 = 运算符,如 $var = (1,2,3,4,5) 等。

【问题讨论】:

    标签: php conditional-operator


    【解决方案1】:

    或者你可以使用in_array()

    if(in_array($var,array(4,5,'string','2010-05-16',true)) {
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用in_array()

      if (in_array($var, array(3,4,5,"string","2010-05-16"))) { .... }
      

      【讨论】:

        【解决方案3】:

        将值放在一个数组中,然后使用函数 in_array() 检查它们是否存在。

        $checkVars = array(3, 4, 5, "string", "2010-05-16");
        if(in_array($var, $checkVars)){
            // Value is found.
        }
        

        http://uk.php.net/manual/en/function.in-array.php

        【讨论】:

        【解决方案4】:
        $vals = array (3, 4, 5, 'string', '2010-05-16');
        if(in_array($var, $vals)) {
          //execute code here
        }
        

        【讨论】:

          【解决方案5】:
          if (in_array($var, array(3, 4, 5, 'string', '2010-05-16'))) {execute code here }
          

          或者,或者,一个开关块:

          switch ($var) {
              case 3:
              case 4:
              case 5:
              case 'string':
              case '2010-05-16':
                  execute code here;
                  break;
          }
          

          【讨论】:

          • 第一个解决方案非常好。这里的第二个选项有效,就像我提出的 if 语句一样有效,但我相信它同样繁琐。不必多次键入 $var,而必须多次键入 case。感谢您的回复!
          【解决方案6】:

          如果您需要经常执行此检查并且需要良好的性能,请不要使用慢速数组搜索,而是使用快速哈希表查找:

          $vals = array(
              1 => 1,
              2 => 1,
              'Hi' => 1,
          );
          
          if (isset($vals[$val])) {
              // go!
          }
          

          【讨论】:

          • 这是一个非常有趣的解决方案。我必须运行一两个脚本才能比较速度,因为我现在很好奇。
          • 嗯...... 6 年多过去了,还没有结论?人们开始怀疑代码一定很慢。 :-)
          • Googling 对于性能比较来说,isset 确实要快得多。 SO上也有一篇关于它的帖子:stackoverflow.com/q/13483219/2199525
          【解决方案7】:

          我遇到了这个问题,通过制作这个函数解决了它:

          function orEquals(){
              $args = func_get_args();
          
              foreach($args as $arg){
                  if ($arg != $args[0]){
                      if($arg == $args[0]){
                          return true;
                          break;
                      }
                  }
              }
              unset($args);
          }
          

          那么你可以像这样调用函数:

          if(orEquals($var, 3, 4, 5, 'string', '2010-05-16')){
          //your code here
          }
          

          【讨论】:

            【解决方案8】:

            只是为了给in_array的使用提供另一种解决方案:

            在某些情况下,将值设置为键的数组然后使用isset()检查会更快

            例子:

            $checkVars= [3 => true, 
                         4 => true, 
                         5 => true, 
                         "string" => true, 
                         "2010-05-16" => true];
            
            if(isset($checkVars[$var])
            {
               // code here
            }
            

            编辑:我做了一些测试,看起来这种方法在大多数情况下更快。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-31
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多