我正在创建一个自定义搜索表单,当我尝试对结果进行排序时,我会显示所有对象而不是匹配条件。我发现的原因是表单中的某些输入没有默认值,并且当稍后未在条件语句中声明(用于排序)时,它只显示所有对象,是否满足其他要求或不。我尝试应用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 == '' ) { ?>
(见最后两个陈述) 我想在包含它之前检查条件语句中的每个变量,但感觉就像不必要的代码。你会怎么做?
答案 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 == '')