поиск вхождения дипазона в массиве

тимофей

Новичок
поиск вхождения дипазона в массиве

есть такая задача:
определить есть ли вхождение имеющегося диапазона времени между двумя элементами массива или нет?

PHP:
$ot = 2342342442;
$do = 2342342542;

$arr = array(2342342342, 2342342642, 2342352342, 2342362342, 2342372342, 2342382342);

/*

в массиве записан диапазон дат 
$arr[0] -> start
$arr[1] -> stop
$arr[2] -> start
$arr[3] -> stop
$arr[4] -> start
$arr[5] -> stop
...

*/
 

тимофей

Новичок
SiMM
а если пар будет 10000?

-~{}~ 22.05.09 14:01:

findnext
хочу понять есть ли более умный способ чем перебирать и сравнивать?
 

findnext

Новичок
тогда расскажи всю задачу от начала до конца а не только это проблемное место. Возможно нужно будет совсем другое решение
 

SiMM

Новичок
> а если пар будет 10000?
То какого лешего вопрос делает в форуме по PHP, а не MySQL?

> хочу понять есть ли более умный способ чем перебирать и сравнивать?
Зависит от задачи. В некоторых случаях, при изменении структуры данных, вопрос о вхождении в диапазон можно свести к одной элементарной операции с просмотром содержимого единственного элемента массива.
 

тимофей

Новичок
findnext
сегодня был на собеседовании по трудоустройству,
передо мной поставили задачу как я написал здесь...

я её решил именно так как предлагал SiMM

PHP:
$a = 880;
$b = 990;

function CheckDia($a,$b){
	
  $input_array = array(123, 456, 789, 999, 1000, 1100);
  $id = array_chunk($input_array, 2);
  $total = count($id);
  for($i=0;$i<$total;$i++) if($a>$id[$i][0] and $b<$id[$i][1])  return "да, вхождение найдено";

}

echo CheckDia($a,$b);
а теперь вот почему-то засомневался...
и решил у профессионалов спросить... есть другой, более простой способ?
 

findnext

Новичок
впринципе есть ещё такая функция как in_array. Можно написать алгоритм который будет использовать эту функцию. Но что быстрее покажут только тесты...
 

dimagolov

Новичок
если массив упорядоченнй, то надо искать только один элемент, который, скажем больше (после исполнения условия проверяем, что предидущий меньше). простое половинное деление подойдет.
 
Сверху