+1 для ответа Matthew, но я думал, что должен упомянуть, что можно также связать больше чем один обработчик событий сразу с помощью bind
$('#myDiv').bind('mouseover focus', function() {
$(this).addClass('focus')
});
, который является намного более чистым эквивалентом:
var myFunc = function() {
$(this).addClass('focus');
};
$('#myDiv')
.mouseover(myFunc)
.focus(myFunc)
;
Итак, сначала убедитесь, что у вас есть хорошо упорядоченные пары (в любом случае, это хорошая идея, в зависимости от того, что вы планируете с ними делать):
if($a1 > $a2) {
// swap $a1 and $a2
$temp = $a1;
$a1 = $a2;
$a2 = $temp;
}
if($b1 > $b2) {
// swap $b1 and $b2
$temp = $b1;
$b1 = $b2;
$b2 = $temp;
}
Затем вы сможете упростить до :
$clash = ($a2 <= $b1) || ($a1 >= $b2);
Редактировать : Упс, сдал этот тест задом наперед! Попробуйте:
$clash = !(($a2 <= $b1) || ($a1 >= $b2));
Диапазоны НЕ конфликтуют тогда и только тогда, когда $ a2 <= $ b1 или $ a1> = $ b2 (при условии, что диапазоны заданы как упорядоченные пары). Теперь отмените условие.
То, что вы ищете, - это пересечение массивов. http://us3.php.net/array_intersect
По сути,
$intersect = array_intersect($arr1, $arr2);
$clash = (count($intersect) > 0);
Если какие-либо элементы находятся как в $ arr1, так и в $ arr2, то $ intersect перечислит эти значения. Вызов count () возвращает 1 (или больше), поэтому если указать> 0, вы получите, если $ arr1 и $ arr2 имеют какие-либо похожие элементы.
Я думаю, это должно быть так просто:
clash = A_LOW <= B_HIGH AND A_HIGH >= B_LOW