我想基于问题参数回显$ q2和$ q3,但不管参数的值如何,它都会给我相同的值。我做错了什么?
$q1 = $_GET['question'];
if ($q1 == "domaina.com"||".domaina.com"||"domaina.co")
{
$q2 = 'domaina';
$q3 = 'DomainA';
}
elseif ($q1 == "domainb.com"||".domainb.com"||"domainb.co")
{
$q2 = 'domainb';
$q3 = 'DomainB';
}
elseif ($q1 == "domainc.com"||".domainc.com"||"domainc.co")
{
$q2 = 'domainc';
$q3 = 'DomainC';
}
else {
$q2 = 'noquestions';
$q3 = 'NoQuestions';
}
答案 0 :(得分:4)
任何非空字符串的计算结果为true,因此您的第一个'或'语句始终计算为true。
要做的是:
if ($q1 == "domaina.com"||$q1 == ".domaina.com"||$q1 == "domaina.co")
而不是
if ($q1 == "domaina.com"||".domaina.com"||"domaina.co")
答案 1 :(得分:4)
太重复了。
$q1 = $_GET['question'];
$q2 = 'noquestions';
$q3 = 'NoQuestions';
if (preg_match('~^.?domain([a-c])\.com?$~',$q1,$m)) {
$q2 = 'domain'.$m[1];
$q3 = 'Domain'.strtoupper($m[1]);
}
顺便说一下,为了让你知道,你编写代码的方式,没有缩进或空格,是非常糟糕的。
答案 2 :(得分:0)
你需要像这样格式化它:
if ($q1 == "domaina.com" || $q1 == ".domaina.com" || $q1 == "domaina.co")
您正在做的事情被解释为:
if ($q1 == ("domaina.com" || ".domaina.com" || "domaina.co"))
// interpreted as:
if ($q1 == (((bool)"domaina.com" || (bool)".domaina.com" || (bool)"domaina.co"))
// interpreted as:
if ($q1 == ((true || true || true))
// interpreted as:
if ($q1 == true)
// interpreted as:
if ((bool)$q1 == true))
另请注意,如果您使用===
运算符,那么您的最后一个条件将是始终评估为true而不是第一个条件的条件,因为您要将字符串与布尔值的结果进行比较操作
答案 3 :(得分:0)
您的==声明中有错误。
应该是这样的:
$q1 = $_GET['question'];
if ($q1 == "domaina.com"|| $q1 == ".domaina.com"|| $q1 == "domaina.co")
{
$q2 = 'domaina';
$q3 = 'DomainA';
}
elseif ($q1 == "domainb.com"|| $q1 == ".domainb.com"||$q1 == "domainb.co")
{
$q2 = 'domainb';
$q3 = 'DomainB';
}
elseif ($q1 == "domainc.com"||$q1 == ".domainc.com"||$q1 == "domainc.co")
{$q2 = 'domainc';
$q3 = 'DomainC';
}
else {$q2 = 'noquestions';
$q3 = 'NoQuestions';
}
您也可以使用in_array
:
$q1 = $_GET['question'];
if(in_array("$q1", array("domaina.com",".domaina.com",""domaina.co"")))
{
$q2 = 'domaina';
$q3 = 'DomainA';
}
//...
答案 4 :(得分:0)
以下内容总是评估为真。
if ($q1 == "domaina.com"||".domaina.com"||"domaina.co")
你可能意味着:
if ($q1 == "domaina.com"||$q1 == ".domaina.com"||$q1 == "domaina.co")
答案 5 :(得分:0)
ifs中的条件错误。先尝试修复它们。
if ($q1 == "domaina.com"||$q1 == ".domaina.com"||$q1 == "domaina.co")
{
...
}
答案 6 :(得分:0)
您可以使用strpos函数简化if语句,如下所示:
$q1 = $_GET['question'];
if (strpos($q1, "domaina") === true) {
$q2 = "domaina";
$q3 = "DomainA";
} elseif (strpos($q1, "domainb") === true) {
$q2 = "domainb";
$q3 = "DomainB";
} elseif (strpos($q1, "domainc") === true) {
$q2 = "domainc";
$q3 = "DomainC";
} else {
$q2 = "noquestions";
$q3 = "NoQuestion";
}
答案 7 :(得分:0)
我认为您可以稍微简化一下代码:
<?php
$q1 = $_GET['question'];
$q2 = getDomain($q1);
$q3 = ucfirst(substr($q2, 0, -1)) + strtoupper(substr($q2, -1));
function getDomain($url){
$arrA = array('domaina.com', '.domaina.com', 'domaina.co');
$arrB = array('domaina.com', '.domaina.com', 'domaina.co');
$arrC = array('domaina.com', '.domaina.com', 'domaina.co');
$q1 = strtolower($url);
if(in_array($q1, $arrA))
return "domaina";
if(in_array($q1, $arrB))
return "domainb";
if(in_array($q1, $arrC))
return "domainc";
return '';
}
?>