我需要检查以确保变量等于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'];
}
答案 0 :(得分:5)
你需要打破逻辑以克服operator precedence。如有疑问,请使用括号。
我也颠倒了逻辑。它读起来更自然。
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))
答案 1 :(得分:1)
尝试:
if (isset($_REQUEST['number']) && ($_REQUEST['number'] == "5" || $_REQUEST['number'] == "10" || $_REQUEST['number'] == "50" || $_REQUEST['number'] == "100")) {
$number = $_REQUEST['number'];
} else {
$number = 5;
}
答案 2 :(得分:1)
你有一些非常令人困惑的代码。没有你说你想要的。
这应该是它:
if (isset($_REQUEST['number']) && in_array($_REQUEST['number'], array(5, 10, 50, 100))) {
$number = (int) $_REQUEST['number'];
} else {
$number = 5;
}
结合其他答案,谢谢大家:)
答案 3 :(得分: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.否则,保持原样。
答案 4 :(得分: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;
}
答案 5 :(得分: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 );