我正在尝试查看mysql存储状态,看看它们是否符合我的代码所在的条件:
$stater = $this->state;
if ($stater == 'WA' OR
$stater == 'BC' OR
$stater == 'CA' OR
$stater == 'NV' OR
$stater == 'AZ' OR
$stater == 'ID' OR
$stater == 'OR' OR
$stater == 'UT' OR
$stater == 'MT' OR
$stater == 'NM' OR
$stater = 'wa' OR
$stater = 'bc' OR
$stater = 'CA' OR
$stater = 'nv' OR
$stater = 'az' OR
$stater = 'id' OR
$stater = 'or' OR
$stater = 'ut' OR
$stater = 'mt' OR
$stater = 'nm'){
$division = "West";
}
else{
$division="";
}
无论如何都会向西返回:\我尝试将='更改为=='s我尝试将每个或者分成自己的括号ex if(($ stater ='ca')||($ stater ='nm'))等但仍然没有任何效果。任何帮助将不胜感激
答案 0 :(得分:7)
问题在于您使用的是=
而不是==
,因此$stater
始终以'WA'
结尾。也就是说,使用数组和in_array()
可能更清晰:
$west = array('WA', 'BC', 'CA', ...);
if (in_array($stater, $west)) {
$division = 'west';
}
答案 1 :(得分:5)
您应该使用==
或===
进行比较
此外,对于您的情况,此代码将更方便:
$stater = $this->state;
$states = array('wa',
'bc',
'ca',
'nv',
'az',
'id',
'or',
'ut',
'mt',
'nm');
if (in_array(strtolower($stater), $states))
{
$division = "West";
}
else
{
$division = "";
}
答案 2 :(得分:1)
因为您在IF块中使用'='而不是'=='。
PS。这段代码看起来更好:
$stater = $this->state;
$states = array('WA', 'BC', 'CA', ...); //add all options
$division = in_array($stater, $states) ? 'West' : '';
答案 3 :(得分:0)
等于运算符是==
,而不是=
。
设置变量始终返回true
,因此默认情况下,您的第$stater = 'wa'
行将为整个表达式返回true。
您是否尝试将OR
切换为||
?
答案 4 :(得分:0)
您混淆了==
和=
。 $stater = 'wa'
将$stater
设置为'wa'并将其评估为布尔值,始终返回true。
另外,您应该真正考虑将switch statement与strtoupper结合使用:
switch(strtoupper($this->state)) {
case 'WA':
case 'BC':
case 'CA':
case 'NV':
$division = "West";
break;
default:
$division="";
}
答案 5 :(得分:0)
在if语句中,您应该始终使用两个==,而不是一个=。 One =分配值,这使其成立。
但是,在这种特殊情况下,我会做其他事情:
if (in_array($starter, array('WA','BC',...))) { ... }
答案 6 :(得分:0)
你肯定=
(设置)与==
混淆(比较)。
无论如何,我可能会在你的情况下使用它,这更容易阅读和编辑:
$valid_states = explode(',', 'WA,BC,CA,NV,AZ,ID,UT,MT,NM');
if (in_array(strtoupper($this->state), $valid_states)) {
$division = "West";
} else {
$division = "";
}
答案 7 :(得分:0)
这里也有一个非传统的答案:
if (stristr('WA BC CA NV AZ ID OR UT MT NM', $stater)) {
比过度特定的阵列/列表检查有点紧凑。在这个和其他情况下,检查允许值列表通常就足够了。