如果等于字符串,则检查多个$ _GET变量

时间:2017-09-11 00:37:52

标签: php

  if(isset($_GET['a']) || isset($_GET['b']) || isset($_GET['c'])){
      if(($_GET['a'] || $_GET['b'] || $_GET['c']) == "x"){
          echo "YES";
      } else {
          echo "NO";
      }
  }

在这个PHP代码中,我正在尝试检查其中一个请求isset以及其中一个是否值== 'x',但第二部分if(($_GET['a'] || $_GET['b'] || $_GET['c']) == "x")没有按照预期工作,我把它包裹在()里面,希望它能起作用,在这种情况下,我是否必须像isset()部分那样将它分开?还是有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

这可能就是你要找的东西

更新 - 我刚刚将||更改为&&以获取最后一个条件,以便您快速试用。

if( (isset($_GET['a']) && $_GET['a'] == "x") || (isset($_GET['b']) && $_GET['b'] == "x") || (isset($_GET['c']) && $_GET['c'] == "x")){
      echo "YES";
} else {
      echo "NO";
}

答案 1 :(得分:0)

如果你必须编写很多条件,你可以使用以下方法之一:

使用foreach和条件:

$either_abc_is_x = function() {
    $keys = ['a','b','c'];
    foreach($keys as $key)
        if(isset($_GET[$key]) && $_GET[$key] == "x")
            return true;
    return false;
};

echo $either_abc_is_x() ? 'YES' : 'NO';

使用带条件的数组过滤器:

$get_abc_keys_equal_to_x = array_filter(['a','b','c'], function($v) {
  return isset($_GET[$v]) && $_GET[$v] == 'x';
});

echo $get_abc_keys_equal_to_x ? 'YES' : 'NO';

阵列体操:

$either_abc_is_x = isset($_GET) && in_array('x', array_intersect_key($_GET, array_flip(['a','b','c'])));

echo $either_abc_is_x ? 'YES' : 'NO';