0

変数が5、10、50、または100のいずれかに等しいことを確認する必要があります。等しくない場合は、5に設定します。誰かがこのIFステートメントの何が問題になっているのか教えてもらえますか?

if (isset($_REQUEST['number']) && $_REQUEST['number'] !== "5" || $_REQUEST['number'] !== "10" || $_REQUEST['number'] !== "50" || $_REQUEST['number'] !== "100") {
  $number = 5;
} else {
  $number = $_REQUEST['number'];
}
4

6 に答える 6

5

演算子の優先順位を克服するには、ロジックを分割する必要があります。疑わしい場合は、括弧を使用してください。

ロジックも逆にしました。より自然に読みます。

if (isset($_REQUEST['number']) && ($_REQUEST['number'] == "5" || $_REQUEST['number'] == "10" || $_REQUEST['number'] == "50" || $_REQUEST['number'] == "100")) {
  $number = $_REQUEST['number'];
} else {
  $number = 5;
}

上記は機能しますが、のようなもので合理化することもできますin_array()

isset($_REQUEST['number']) && in_array($_REQUEST['number'], array(5, 10, 50, 100))
于 2012-11-09T17:44:50.877 に答える
1

試す:

 if (isset($_REQUEST['number']) && ($_REQUEST['number'] == "5" || $_REQUEST['number'] == "10" || $_REQUEST['number'] == "50" || $_REQUEST['number'] == "100")) {
  $number = $_REQUEST['number']; 
 } else {
   $number = 5;
 }
于 2012-11-09T17:45:04.323 に答える
1

非常に紛らわしいコードがあります。あなたが望んでいたと言ったことは何もしません。

これはそれであるはずです:

if (isset($_REQUEST['number']) && in_array($_REQUEST['number'], array(5, 10, 50, 100))) {
    $number = (int) $_REQUEST['number'];
} else {
    $number = 5;
}

他の回答と組み合わせて、みんなに感謝します:)

于 2012-11-09T17:52:50.670 に答える
0

iMosesやその他の人は、ルーチンを単純化するための基本をすでに定めていますが、チェックをより厳密にすることをお勧めしますin_array()。そうしないと$_REQUEST['number']、たとえば等しい場合'10F'、それも合格します。

// I like to define default values up front.
$number = 5;

// since $_REQUEST['number'] should always be a string
// make in_array() check strictly against these string values
$allowedNumbers = array( '5', '10', '50', '100' );

// make in_array check strictly
if( isset( $_REQUEST['number'] ) && in_array( $_REQUEST['number'], $allowedNumbers, true ) )
{
    // get proper integer value
    $number = intval( $_REQUEST['number'] );
}

var_dump( $number );
于 2012-11-09T18:06:14.897 に答える
0

あなたは少し物事を交換する必要があります:

if (!isset($_REQUEST['number']) || ($_REQUEST['number'] !== "5" && $_REQUEST['number'] !== "10" && $_REQUEST['number'] !== "50" && $_REQUEST['number'] !== "100")) {
  $number = 5;
} else {
  $number = $_REQUEST['number'];
}

上記のナレーション:番号が設定されていない場合は5にします。設定されているが、5、10、50、または100でない場合は、5に設定します。それ以外の場合はそのままにします。

于 2012-11-09T17:52:10.063 に答える
0

長期的には、単一の「if」ステートメントを使用するよりも、ロジックを別の形式に分割して少し明確にしようとする方が簡単な場合があります。

$acceptable = array(5, 10, 50, 100);
$number     = null;

if (isset($_REQUEST['number']) {
    $number = intval($_REQUEST['number']);
}

if (!in_array($number, $acceptable)) {
    $number = 5;
}

しかし、それを単一のifステートメントとして保持することで:

if (
    isset($_REQUEST['number']) && (
        $_REQUEST['number'] === "5" ||
        $_REQUEST['number'] === "10" ||
        $_REQUEST['number'] === "50" ||
        $_REQUEST['number'] === "100"
    )
) {
  $number = $_REQUEST['number'];
} else {
  $number = 5;
}
于 2012-11-09T17:53:01.903 に答える