if语句在php中具有多个条件

时间:2012-08-05 03:47:31

标签: php

我有if语句有多个条件,
这两个条件有什么区别:
1.

    if($province=="AB" || "NT" || "NU" || "YT")
{
    $GST=5;
}
else if($province=="BC" || "MB")
{
    $GST=5;
    $PST=7;
}
else if($province=="NB" || "NF" || "ON")
{
    $HST=13;
}  

,第二是:
2.

if($province=="AB" || $province=="NT" || $province=="NU" || $province=="YT")
{
    $GST=5;
}
else if($province=="BC" || $province=="MB")
{
    $GST=5;
    $PST=7;
}
else if($province=="NB" || $province=="NF" || $province=="ON")
{
    $HST=13;
}

3 个答案:

答案 0 :(得分:3)

两者之间的区别在于第一个不能按预期工作,第二个在技术上是正确的。

代码:

if($province=="AB" || "NT" || "NU" || "YT")

将始终求值为true并执行该条件块中的代码。

原因是您只检查$province == "AB"是否正在检查"NT" == true是否会评估为真。

要针对所有这些值(AB,NT,NU,YT)检查省,您需要针对每个值明确检查$province,而不仅仅是第一个,这是您在第二个示例中正确执行的操作

答案 1 :(得分:2)

我添加到drew010答案,你也可以这样做(更简单):

if(in_array($province,array("AB","NT","NU","YT"))
{
    $GST=5;
}
else if(in_array($province,array("BC","MB"))
{
    $GST=5;
    $PST=7;
}
else if(in_array($province,array("NB","NF","ON"))
{
    $HST=13;
}

答案 2 :(得分:1)

第一个将始终评估为true。在第一个示例中的第二个,第三个和第四个OR子句中,您基本上要求PHP将字符串转换为布尔值,而非空字符串将始终评估为true。

只是为了好玩,我最喜欢处理类似条件的方法是使用switch语句。我阅读起来容易得多,但这确实是个人偏好的事情。

switch ( $province ) {

   case 'AB' :
   case 'NT' :
   case 'NU' :
   case 'YT' :

     $GST = 5;

   break;

   case 'BC' :
   case 'MB' :

     $GST = 5;
     $PST = 7;

   break;

   case 'NB' :
   case 'NF' :
   case 'ON' :

      $HST = 13;

   break;

}