0

私は次のようなコードを持っています:

if ($first == 1); {
$q1 = "1";
$q2 = "2";
$q3 = "3";
}

if ($first == 2); {
$q1 = "1a";
$q2 = "2a";
$q3 = "3a";
}

if ($first == 3); {
$q1 = "1b";
$q2 = "2b";
$q3 = "3b";
}

変数$firstは、以前にソートされた配列から取得されます。これは、その配列からのキー値です。

この場合、変数は2ですが、コードは-常に-他のものに関係なく最後のブロックを取ります。したがって、2ブロックではなく、3ブロックの回答が報告されます。

つまり、$ firstに対して1、2、または3の値を取得すると、$q1に対して常に1bが返されます。

誰もが理由を知っていますか?これは私を狂わせています。

4

3 に答える 3

4

まず、条件を囲む括弧からセミコロンを削除します。

次に、 and を使用する必要がif()ありelse if()ます。

if($first == 1) {
    $q1 = "1";
    $q2 = "2";
    $q3 = "3";
} else if($first == 2) {
    $q1 = "1a";
    $q2 = "2a";
    $q3 = "3a";
} else if($first == 3) {
    $q1 = "1b";
    $q2 = "2b";
    $q3 = "3b";
}

ただし、3 つ以上の状態を比較する場合は、次のようにswitch()ステートメントを使用してよりクリーンなコードを生成する必要があります。

switch($first) {
    case 1:
        $q1 = "1";
        $q2 = "2";
        $q3 = "3";
    break;
    case 2:
        $q1 = "1a";
        $q2 = "2a";
        $q3 = "3a";
    break;
    case 3:
        $q1 = "1b";
        $q2 = "2b";
        $q3 = "3b";
    break;
}
于 2012-06-02T22:07:20.997 に答える
2

;ifステートメントの最後にあるべきではありません。つまり、これに変更if ($first == 1); {しますif ($first == 1) {

于 2012-06-02T22:06:19.380 に答える
0

switch ステートメントを使用することもできます。

switch($first) 
{
    case 1:
       $q1 = "1";
       $q2 = "2";
       $q3 = "3";
       break;
    case 2:
       $q1 = "1a";
       $q2 = "2a";
       $q3 = "3a";
       break;
    case 3:
       $q1 = "1b";
       $q2 = "2b";
       $q3 = "3b";
       break;
    default:
}
于 2012-06-02T22:10:44.160 に答える