За последние 24 часа нас посетили 37854 программиста и 1810 роботов. Сейчас ищут 817 программистов ...

Сравнение значений в массиве

Тема в разделе "PHP для новичков", создана пользователем Eser, 22 фев 2011.

  1. Eser

    Eser Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Есть массив
    Array ( [0] => 29 [1] => 30 [2] => 31 [3] => 32 [4] => 33 [5] => 34 [6] => 35 )

    Подскажите как для значения 33 найти самое близкое большое значение.
    для 33 это будет 34
     
  2. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    мопед не мой, я только открутил педали

    PHP:
    1. <?php
    2. function BinSearchNear($arr, $find) {
    3.   $first = $arr[0];
    4.   $last = $arr[(sizeof($arr) - 1)];
    5.   if($find < $first || $find > $last) {
    6.     return $result = "Элемент находится вне заданного массива";
    7.     }
    8.  
    9.   $min = 0;
    10.   $max = sizeof($arr) - 1;
    11.   while($min < $max) {
    12.     $pos = (($min + $max) - ($min + $max) % 2) / 2;
    13.     if($find <= $arr[$pos])
    14.       $max = $pos;
    15.     else
    16.       $min = $pos + 2;//+ 1;
    17.     }
    18.   //if($arr[$max] == $find)
    19.   return $result = $max + 1;
    20. /*
    21.   else
    22.     return $result = "Элемент не найден";
    23. */
    24.   }
    25. $someArr = array(29, 30, 31, 32, 33, 34, 35);
    26. echo $someArr[BinSearchNear($someArr, 33)];
    27.  
    28. ?>
    upd: если где-то пропущен ключ, табор уходит в небо. Если массив из одного элемента, то тоже фигня. Так что лучше допилить.
     
  3. Eser

    Eser Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    141
    Симпатии:
    0
    Щас заценим спасибо.