1

我只是想知道是否有捷径可以做这样的例子:

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

[编辑]:对不起,如果这个问题起初看起来模棱两可,但我的意思是“因为我正在对同一个变量进行所有这些检查,有没有更好的方法不要写三遍?”

有没有更简单的方法是罕见的和..

  1. 比嵌套更干净。
  2. 比上面的语法短?
  3. 在任何(Ruby、C# 或 PHP)中,因为我主要使用这 3 种语言。

这只是一个常识性问题,我只是厌倦了编写嵌套的 if 或像上面这样的长逻辑运算。

4

7 回答 7

2

您可以定义一个用于获取帖子数据的函数:

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

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

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

}
于 2012-04-20T18:06:45.693 回答
1

在红宝石中

if $_POST['name'] && ['George', 'Mike'].include?($_POST['name'])
于 2012-04-20T19:36:56.123 回答
1

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

  1. 将所有值放在一个数组中。
  2. 检查变量是否已设置。
  3. 使用in_array函数查找变量的值是否存在于值数组中。
于 2012-04-20T18:17:02.057 回答
0

嗯,这个问题非常笼统。你怎么能不多次使用同一个变量名呢?好吧,你的代码是什么样的,我会告诉你:)一般来说,这不是一个真正可能回答的问题。在您的示例中,您可以执行以下操作(在 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")) {
于 2012-04-20T18:22:54.127 回答
0

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

您可以通过复制/复制项目中的功能来稍微清理一下sfParameterHolder

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

最终结果可能如下所示:

$post = new sfParameterHolder($_POST);

switch( $post->get('name') )
{
  case 'george':
  case 'mike':
    // Do something.
    break;
}
于 2012-04-20T18:25:48.890 回答
0

用于isset确保该值不存在NULL,然后strlen确保您确实在其中有一些东西。

if(isset($_POST['name']) && strlen($_POST['name']) > 0)
{
    //Do stuff
}
于 2012-04-20T18:10:31.170 回答
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)) {}
于 2012-04-20T18:20:13.213 回答