【问题标题】:Is this Valid PHP? Complex If statement这是有效的 PHP 吗?复杂的 If 语句
【发布时间】:2011-07-30 08:49:42
【问题描述】:

我可以做类似的事情

if($x != (y&&z&&r&&w))

还是要这样写

if($x!=y && $x!=z && $x!=r && x!=w)

只是想知道,因为我有很多变量要比较,只是想要一个更优雅的解决方案。

无论如何,您可能有一个更优雅的解决方案。这就是我想要做的。

foreach($_POST as $key => $value){
        if($key != 'category_id'){
            $cp[$key] = $value;
        }
    }

在我的 $_POST 语句中我还有大约 6 个变量要比较,我想让代码更漂亮。它基本上是一个巨大的表单,需要格式化为具有特定键的特定数组 ($cp[]) 才能使用我的 MySQL 插入语句。

有什么奇思妙想?

【问题讨论】:

    标签: php post syntax foreach if-statement


    【解决方案1】:

    您的第一部分代码:

    if($x != (y&&z&&r&&w))
    

    将评估常量yzrw (字符串'y''z''r''w',如果这些常量不存在) ;在每个人之间做一个AND

    然后,AND 的结果将与 $x 进行比较——这将被视为布尔值。


    所以,不,它并没有达到你希望的效果;你必须使用你的第二部分代码:

    if($x!=y && $x!=z && $x!=r && x!=w)
    

    请注意,这里也会搜索名为 yzrw 的常量(或字符串,如果这些常量仍然不存在) -- 如果您希望它们被视为变量,您可能应该在它们前面加上一些 $


    如果您想测试一个变量是否具有多个值之一,一种可能的解决方案是将这些值放入一个数组中,然后使用in_array() 函数:

    if (in_array($x, array(10, 20, 30) )) {
        // $x is one of those values : 10, 20, 30
    }
    

    有些人认为这样比写几个比较更容易理解——我有时自己用这个,有点喜欢。

    【讨论】:

    • 当然,我只是使用速记。表示变量/字符串/整数,无论​​如何。我会有更具体的东西来比较它。 IE if($key != $x && $key != $y)。感谢您的回答!
    【解决方案2】:

    您必须编写长格式或使用in_array 和包含您的值的数组。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      if($x != (y&&z&&r&&w))
      

      它们必须分成 4 个比较。

      或者,您可以做的是将值粘贴在一个数组中并且只有 1 个比较:

      $skip_keys = array('a', 'b', 'c', 'd');
      
      foreach ($_POST AS $key => $value) {
          if ( ! in_array($key, $skip_keys)) {
              // Continue
          }
      }
      

      【讨论】:

      • 谢谢。这更像是我正在寻找的解决方案。优雅、小巧、易于管理。
      【解决方案4】:

      你不能说

      if ($x != (1&&2&&3))
      

      这样

      早年我也想知道我们是否可以这样做

      if (1 < $x < 5)
      

      答案是否定的。但是您可以使用in_array() 来测试数组中是否有某些内容,以便您一次检查多个值:

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

      【讨论】:

        【解决方案5】:

        如果您要多次进行此比较,我的建议是编写一个函数来验证您的要求。因此,您将传入您的 '$x' 并可以将其与您需要的所有内容进行比较,并得到一个布尔结果。该函数可以使用 ifs 和 elseifs 很好地构造,并且您将保持代码更简洁。

        所以,例如...

        <?php
        // random, bad logic, but you get the idea
        function validateThisThing($x) {
            $toReturn = false;
            if ($x == 'this') {
                $toReturn = true;
            } elseif ($x == 'that') {
                $toReturn = true;
            }
            return $toReturn;
        }
        

        然后,您可以根据需要使用该函数,并让您的检查更清晰、更有条理,因为您的函数名称会将上下文带入正在检查的内容中​​。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-06
          相关资源
          最近更新 更多