所以在过去的几天里,我一直在积极学习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!";
}