PHP:有没有办法,如果/ elseif / else语句更短,写这个?

时间:2016-03-16 20:32:37

标签: php if-statement

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

我尝试编写脚本,我有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语句完成吗?

任何反响都会得到赞赏!

4 个答案:

答案 0 :(得分:7)

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

$people=array('Bob Bob', 'Bill Bill');//etc

if(in_array($first.' '.$last,$people)){
 print "Hello!";
}else{
   print "I dont know you!";
}

答案 1 :(得分:4)

使用数组的解决方案。假设所有已知名称都是同名的对(bob bob,jeb jeb等)

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

答案 2 :(得分:0)

我会使用数组(避免重复代码/ 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!";
}

答案 3 :(得分:0)

在您的示例中,您基于两个测试做出决定:

我是否认可提交的名字?

我是否认可提交的姓氏?

然后你根据上述测试是否都是真的来回应。

我建议你将每个测试分成它自己的功能:

    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!";
    }