0

複数の条件を持つ if ステートメントがあります。
この 2 つの条件の違いは何ですか:
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 つ目は
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;
}
4

3 に答える 3

3

この 2 つの違いは、前者は期待どおりに機能せず、後者は技術的に正しいことです。

コード:

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

は常に true と評価され、その条件ブロック内のコードを実行します。

その理由は、true と評価されるかどうかのみをチェック$province == "AB"し、次に"NT" == truetrue と評価されるかどうかをチェックしているためです。

これらのすべての値 (AB、NT、NU、YT) に対して州をチェックするに$provinceは、最初の値だけでなく、各値に対して明示的にチェックする必要があります。これは、2 番目の例で正しく行っていることです。

于 2012-08-05T03:51:15.703 に答える
2

draw010 の回答に、これも実行できることを追加します (こちらの方が簡単です)。

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;
}
于 2012-08-05T03:53:58.053 に答える
1

最初のものは常に true と評価されます。最初の例の 2 番目、3 番目、および 4 番目の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;

}
于 2012-08-05T03:52:28.273 に答える