PHP:带有可能空变量的条件语句

时间:2010-08-01 15:36:19

标签: php conditional

我正在创建一个自定义搜索表单,当我尝试对结果进行排序时,我会显示所有对象而不是匹配条件。我发现的原因是表单中的某些输入没有默认值,并且当稍后未在条件语句中声明(用于排序)时,它只显示所有对象,是否满足其他要求或不。我尝试应用OR语句,特定变量可以为空,但它给出了相同的结果。像这样 -

<?php if ($bedrooms >= $min_rooms 
          && $bedrooms <= $max_rooms 
          && $space >= $min_space 
          && $space <= $max_space 
          && $price >= $min_price 
          && $price <= $max_price 
          && $sel_type == $type 
          || $sel_type == '' 
          && $country == $sel_country 
          || $sel_country == '' ) { ?>

(见最后两个陈述) 我想在包含它之前检查条件语句中的每个变量,但感觉就像不必要的代码。你会怎么做?

2 个答案:

答案 0 :(得分:3)

&&运算符的优先级高于||运算符,因此您的表达式目前按此分组,可能不是您想要的:

($bedrooms >= $min_rooms && $bedrooms <= $max_rooms && $space >= $min_space && $space <= $max_space && $price >= $min_price && $price <= $max_price && $sel_type == $type)
||
($sel_type == '' && $country == $sel_country)
||
($sel_country == '' )

尝试添加这样的括号以实现正确的分组:

($bedrooms >= $min_rooms && $bedrooms <= $max_rooms && $space >= $min_space && $space <= $max_space && $price >= $min_price && $price <= $max_price && ($sel_type == $type || $sel_type == '') && ($country == $sel_country || $sel_country == '') )

答案 1 :(得分:1)

您的表达式可能会失败,因为&&运算符的precedence运算符高于||。这意味着像这样的表达式:

… && $sel_type == $type || $sel_type == ''

等同于此(使用括号突出显示的运算符优先级):

(… && $sel_type == $type) || $sel_type == ''

要解决此问题,请将||表达式放在括号中:

$bedrooms >= $min_rooms && $bedrooms <= $max_rooms && $space >= $min_space && $space <= $max_space && $price >= $min_price && $price <= $max_price && ($sel_type == $type || $sel_type == '') && ($country == $sel_country || $sel_country == '')

此外,如果使用一些辅助函数(如between函数),则表达式可能更容易阅读和维护:

function between($val, $min, $max) {
    return $min <= $val && $val <= $max;
}

然后你的表达式为:

between($bedrooms, $min_rooms, $max_rooms) && between($space, $min_space, $max_space) && between($price, $min_price, $max_price) && ($sel_type == $type || $sel_type == '') && ($country == $sel_country || $sel_country == '')