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']会,例如 equal '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”语句。

$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 回答
0

你需要交换一些东西:

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

上面的叙述:如果没有设置number,则设置为5。如果设置了,但不是5、10、50或100,则设置为5。否则,保持原样。

于 2012-11-09T17:52:10.063 回答