这个逻辑运算符有什么快捷方式吗?

时间:2012-04-20 18:02:46

标签: c# php ruby-on-rails ruby

我只是想知道是否有一个快捷方式来做这样的事情:

if ( isset($_POST['name']) && $_POST['name'] == 'George' || $_POST['name'] == 'Mike' );

[编辑]:对不起,如果这个问题一开始看起来很模糊,但我要问的是“因为我在同一个变量上进行所有这些检查是否有更好的方法不写三次?”

有没有更简单的方法,而且......

  1. 比筑巢更清洁。
  2. 比上面的语法更短?
  3. 中的任何一个(Ruby,C#或PHP)因为我主要使用这三种语言。
  4. 这只是一个常识性问题,我只是厌倦了编写嵌套ifs或长逻辑操作,如上所述。

7 个答案:

答案 0 :(得分:2)

您可以定义获取帖子数据的功能:

function getPOST($name) {
  return isset($_POST[$name]) ? $_POST[$name] : null;
}

该函数永远不会显示有关访问不存在的数组字段的通知,并且结果可以轻松地与示例中的值列表进行比较:

if (in_array(getPOST('name'), array('George', 'Mike')) {

}

答案 1 :(得分:1)

我不确定我是否理解你的问题,但看起来你想要将特定变量与一组值进行比较。您可以执行以下操作:

  1. 将所有值放入数组中。
  2. 检查变量是否已设置。
  3. 使用in_array函数查找变量值是否存在于值数组中。

答案 2 :(得分:1)

在Ruby中

if $_POST['name'] && ['George', 'Mike'].include?($_POST['name'])

答案 3 :(得分:0)

使用isset确保该值不是NULL,然后是strlen,以确保其中确实存在某些内容。

if(isset($_POST['name']) && strlen($_POST['name']) > 0)
{
    //Do stuff
}

答案 4 :(得分:0)

function post_data($key){
    if(isset($_POST[$key]) && $_POST[$key]!='') return $_POST[$key];
    return null;
}

$possible_names  = array('George', 'Mike');

if(in_array(post_data('name'), $possible_names)) {}

答案 5 :(得分:0)

嗯,问题非常笼统。你怎么不多次使用相同的变量名?那么,你的代码是什么样的,我会告诉你:)在 general 中,这不是一个真正可以回答的问题。在您的示例中,您可以执行以下操作(在C#中):

string x = "foo";
if ( new string[]{"bar","baz","foo","foobar"}.Contains(x)) ....

或者:

public static class Extensions {
        public static bool In<T>(this T needle, params T[] haystack){
            return haystack.Contains(needle);
        }
    }


string x = "foo";
if (x.In("bar", "baz", "foo", "foobar")) {

答案 6 :(得分:0)

Symfony 1.4框架利用sfParameterHolder来处理试图确定元素是否存在于数组中的问题。

您可以通过复制/复制项目中sfParameterHolder的功能来清理一些事情。

如果您希望使用该语法清除条件中的所有值,也可以使用switch语句。

最终结果可能如下所示:

$post = new sfParameterHolder($_POST);

switch( $post->get('name') )
{
  case 'george':
  case 'mike':
    // Do something.
    break;
}