这是有效的PHP吗?复杂的If语句

时间:2011-04-05 22:01:37

标签: php post syntax foreach if-statement

我可以做点什么吗

if($x != (y&&z&&r&&w))

或者我必须像这样写

if($x!=y && $x!=z && $x!=r && x!=w)

只是想知道,因为我有很多变量要比较,只是想要一个更优雅的解决方案。

无论如何,你可能会有一个更优雅的解决方案。这就是我想要做的。

foreach($_POST as $key => $value){
        if($key != 'category_id'){
            $cp[$key] = $value;
        }
    }

我在$ _POST语句中还有6个以上的变量要比较,我想让代码漂亮。它基本上是一个巨大的形式,需要格式化为特定的数组($ cp []),并使用特定的键来使用我的MySQL插入语句。

有什么奇特的想法吗?

5 个答案:

答案 0 :(得分:4)

您的第一部分代码:

if($x != (y&&z&&r&&w))

将评估常量yzrw (字符串'y''z',{{1 }}和'r',如果这些常量不存在的话);在每一个之间做'w'

然后,此AND的结果将与AND进行比较 - 这将被视为布尔值。


所以,不,它不是你想做的那样;你必须使用你的第二部分代码:

$x

请注意,这里也会搜索名为if($x!=y && $x!=z && $x!=r && x!=w) yzr 的常量(或字符串,如果这些常量仍然存在不存在) - 如果你希望它们被视为变量,你应该在它们面前放一些w


如果要测试变量是否具有多个值中的一个,可能的解决方案是将这些值放入数组中,然后使用in_array()函数:

$

有些人认为这种方式比写几种比较更容易理解 - 我有时会自己使用它,有点像它。

答案 1 :(得分:2)

您必须编写长格式或使用in_array以及包含值的数组。

答案 2 :(得分:1)

你可以这样做:

if($x != (y&&z&&r&&w))

必须将它们分开进行4次比较。

或者,您可以做的是将值粘贴在一个数组中,只进行一次比较:

$skip_keys = array('a', 'b', 'c', 'd');

foreach ($_POST AS $key => $value) {
    if ( ! in_array($key, $skip_keys)) {
        // Continue
    }
}

答案 3 :(得分:0)

你不能说

if ($x != (1&&2&&3))
像那样

我早年也想知道我们能不能做到

if (1 < $x < 5)

答案是否定的。但您可以使用in_array()来测试数组中的某些内容,以便您一次检查多个值:

http://php.net/manual/en/function.in-array.php

答案 4 :(得分:0)

我的建议是,如果你多次进行这种比较,就是编写一个验证你的要求的函数。因此,您将传入'$ x'并将其与您需要的所有内容进行比较,并获得布尔结果。使用ifs和elseifs可以很好地构建该函数,并且可以保持代码更清晰。

所以,例如......

<?php
// random, bad logic, but you get the idea
function validateThisThing($x) {
    $toReturn = false;
    if ($x == 'this') {
        $toReturn = true;
    } elseif ($x == 'that') {
        $toReturn = true;
    }
    return $toReturn;
}

然后您可以根据需要使用该功能,并使您的检查更清晰,更有条理,因为您的功能名称将为检查内容带来上下文。