Ваше выражение может завершиться ошибкой, так как оператор &&
имеет более высокий приоритет , чем операция ||
.Это означает, что выражение вроде этого:
… && $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:
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 == '')