php - отобразить значение, используя fromRange и toRange? - PullRequest
2 голосов
/ 12 октября 2011

Я пытаюсь выяснить, как сопоставить число от 1 до 1000 с числом от 1 до 5 .

Например:

У меня есть база данных из 1000 записей, и я хочу назначить идентификационный номер от 1 до 5 для каждой записи. Я не хочу, чтобы это было случайно, это достаточно просто с rand(1,5).

В языке Arduino есть функция, которая, я надеюсь, в PHP:

result = map(value, fromLow, fromHigh, toLow, toHigh)

Цель этого в том, что я не хочу хранить это отображенное значение в базе данных, мне нужна функция php, которую я могу вызвать, и если, скажем, запись в db равна 100, независимо от того, как часто вызывается функция, она всегда будет вернуть то же самое отображенное значение.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 12 октября 2011

Функция поиска диапазонов карт с использованием разных масштабов.Так что это легко сделать:

function map($value, $fromLow, $fromHigh, $toLow, $toHigh) {
    $fromRange = $fromHigh - $fromLow;
    $toRange = $toHigh - $toLow;
    $scaleFactor = $toRange / $fromRange;

    // Re-zero the value within the from range
    $tmpValue = $value - $fromLow;
    // Rescale the value to the to range
    $tmpValue *= $scaleFactor;
    // Re-zero back to the to range
    return $tmpValue + $toLow;
}

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

$feet = map($inches, 0, 12, 0, 1);

И вы также можете отобразить «диапазоны», поскольку он повторно основывает число (перемещает его вдоль числовой линии):

5 == map(15, 10, 20, 0, 10);

Таким образом, для диапазона (0, 1000) и диапазона (0, 5) следующая таблица будет иметь значение true:

  • -200 |-1
  • 0 |0
  • 1 |0,005
  • 100 |0,5
  • 200 |1
  • 400 |2
  • 600 |3
  • 800 |4
  • 1000 |5
  • 2000 |10
  • 3000 |15

И чтобы показать перебазирование, если мы сопоставим (0, 1000) с (5, 10):

  • -200 |4
  • 0 |5
  • 1 |5,005
  • 100 |5,5
  • 200 |6
  • 400 |7
  • 600 |8
  • 800 |9
  • 1000 |10
  • 2000 |15
  • 3000 |20
3 голосов
/ 12 октября 2011

Рассматривали ли вы: $mappedValue = ($value % 5) + 1;? Вернет остаток после деления значения на 5 (то есть 0-4), а затем добавит единицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...