Обнаружение, если два диапазона числа сталкиваются

+1 для ответа Matthew, но я думал, что должен упомянуть, что можно также связать больше чем один обработчик событий сразу с помощью bind

$('#myDiv').bind('mouseover focus', function() {
    $(this).addClass('focus')
});

, который является намного более чистым эквивалентом:

var myFunc = function() {
    $(this).addClass('focus');
};
$('#myDiv')
    .mouseover(myFunc)
    .focus(myFunc)
;
5
задан Jack Sleight 8 September 2009 в 22:04
поделиться

4 ответа

Итак, сначала убедитесь, что у вас есть хорошо упорядоченные пары (в любом случае, это хорошая идея, в зависимости от того, что вы планируете с ними делать):

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));
11
ответ дан 18 December 2019 в 06:23
поделиться

Диапазоны НЕ конфликтуют тогда и только тогда, когда $ a2 <= $ b1 или $ a1> = $ b2 (при условии, что диапазоны заданы как упорядоченные пары). Теперь отмените условие.

2
ответ дан 18 December 2019 в 06:23
поделиться

То, что вы ищете, - это пересечение массивов. http://us3.php.net/array_intersect

По сути,

$intersect = array_intersect($arr1, $arr2);
$clash = (count($intersect) > 0);

Если какие-либо элементы находятся как в $ arr1, так и в $ arr2, то $ intersect перечислит эти значения. Вызов count () возвращает 1 (или больше), поэтому если указать> 0, вы получите, если $ arr1 и $ arr2 имеют какие-либо похожие элементы.

0
ответ дан 18 December 2019 в 06:23
поделиться

Я думаю, это должно быть так просто:

clash = A_LOW <= B_HIGH AND A_HIGH >= B_LOW
9
ответ дан 18 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: