PHP :有没有办法,把这个 if/elseif/else 语句写得更短


PHP : Is there a way, to write this if/elseif/else statement shorter?

所以在过去的几天里,我一直在积极学习PHP,为了练习,我编写了PHP脚本,它采用HTML表单值。

尝试编写脚本,我有5个人,您必须输入您的姓名。如果它与五个人中的一个匹配,则发送一条消息,如果不是,则发送其他消息。这是(没有表单部分,只有PHP):

    $first = $_POST["first"];
    $last = $_POST["last"];
    if ($first == "Jeb") {
        if ($last == "Jeb") {
            print "Hello!";
        } else {
            print "I dont know you!";
        }
    } elseif ($first == "Bob") {
        if ($last == "Bob") {
            print "Hello!";
        } else {
            print "I dont know you!";
        }
    } elseif ($first == "Bill") {
        if ($last == "Bill") {
            print "Hello!";
        } else {
            print "I dont know you!";
        }
    } elseif ($first == "Annie") {
        if ($last == "Annie") {
            print "Hello!";
        } else {
            print "I dont know you!";
        }
    } elseif ($first == "Hugo") {
        if ($last == "Hugo") {
            print "Hello!";
        } else {
            print "I dont know you!";
        }
    } else {
        print "I dont know you!";
    }

它工作得很好,但我有疑问 - 这可以做得更容易/写得更短吗?这可以使用 switch 语句来完成吗?

任何回应都将不胜感激!

我可以看到使用数组的方法

$people=array('Bob Bob', 'Bill Bill');//etc
if(in_array($first.' '.$last,$people)){
 print "Hello!";
}else{
   print "I dont know you!";
}
使用

数组的解决方案。假设所有已知名称都是同名的对(鲍勃鲍勃、杰布杰布等)

$knownNames = array("Jeb", "Bob", "Bill", "Annie", "Hugo");
if (in_array($first, $knownNames) && $first == $last)
  print "Hello!";
else
  print "I don't know you!"

我会改用数组(避免重复代码/ifs)

$name = array(
  'first' => $_POST["first"],
  'last'  => $_POST["last"]
);
$knownNames = array(
  array(
    'first' => 'Bob',
    'last'  => 'Bob'
  ),
  array(
    'first' => 'Bill',
    'last'  => 'Bill'
  ),
  array(
    'first' => 'Annie',
    'last'  => 'Annie'
  ),
  array(
    'first' => 'Hugo',
    'last'  => 'Hugo'
  )
);
if (in_array($name, $knownNames)) {
    print "Hello!";
} else {
    print "I dont know you!";
}

在您的示例中,您根据两个测试做出决策:

我能认出提交的名字吗?

我能认出提交的姓氏吗?

然后,您根据上述测试是否都为真来响应。

我建议您将每个测试分离到它自己的函数中:

    function isValidFirstName($name)
    {
        $valid_names = array('Jeb','Bob','Bill','Annie','Hugo');
        return in_array($name, $valid_names);
    }
    function isValidLastName($name)
    {
        $valid_names = array('Jeb','Bob','Bill','Annie','Hugo');
        return in_array($name, $valid_names);
    }
    $first = $_POST['first'];
    $last = $_POST['last'];
    if( isValidFirstName($first) && isValidLastName($last) )
    {
        print "Hello!";
    } else 
    {
        print "I don't know you!";
    }