[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Входит ли заданное число в диапазон
vagon
Здравствуйте!
Потребовалось проверить, входит ли заданное число в один из имеющихся диапазонов. Т.е., имеется:

диапазон от 0 - 9 (включительно),
диапазон от 10 - 99 (включительно),
диапазон от 100 - 299 (включительно),
диапазон от 300 - 599 (включительно),
диапазон от 600 - 999 (включительно),
и диапазон от 1000 до + бесконечности

Каким образом это можно оформить например в виде функции, которая бы возвращала например ответ, типа: echo 'Число входит в диапазон 1'; ? в настоящее время использую массу <= >= > < и прочего подобного непотребства которое приводит к большой путанице....



Спустя 6 минут, 49 секунд (16.07.2012 - 18:36) pak написал(а):
можно через range - Создает массив, содержащий диапазон элементов, и проверять через in_array

Спустя 13 минут, 54 секунды (16.07.2012 - 18:50) vagon написал(а):
Т.е. будут созданы массивы array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) и т.п. Я даже боюсь предположить, сколько памяти на сервере займет массив с числами из последнего диапазона... smile.gif Или я что-то не так понял?

Спустя 2 минуты, 6 секунд (16.07.2012 - 18:52) pak написал(а):
да нормально все будет)

Спустя 6 секунд (16.07.2012 - 18:52) I++ написал(а):
<?php

$range = array(array(0, 9),
array(10, 99),
array(100, 299),
array(300, 599),
array(600, 999),
array(1000, PHP_MAX_INT)
);


var_dump(numeric_range(600, $range));

function numeric_range($num, $range)
{
foreach($range as $key => $val)
{
if($val[0] <= $num && $num <= $val[1])
return $key;
}

return false;
}

?>


Пыщ не?

Цитата
можно через range - Создает массив, содержащий диапазон элементов, и  проверять через in_array


:lol:

Цитата
сколько памяти на сервере займет массив с числами из последнего диапазона...


Слово бесконечность матановое понятие, в компах такого понятия нет, все когда нибудь заканчивается. В данном случае для 32-разрядных сборок PHP максимальное число для бесконечности без погрешностей в точности это PHP_MAX_INT

Спустя 9 минут, 1 секунда (16.07.2012 - 19:01) pak написал(а):
I++
мало опыта, так сказать жопы нет =) или тупа плохо подумал я ))

Спустя 12 минут (16.07.2012 - 19:13) vagon написал(а):
PHP_MAX_INT это здорово, но даже приближаться к нему не хотелось бы smile.gif
I++, в Вашем примере как с этим дела обстоят?
P.S. пример pak я уже проверил, чуть со стула не упал когда на использование памяти глянул smile.gif

Спустя 1 минута, 49 секунд (16.07.2012 - 19:15) I++ написал(а):
Цитата (vagon @ 16.07.2012 - 20:13)
PHP_MAX_INT это здорово, но даже приближаться к нему не хотелось бы smile.gif
I++, в Вашем примере как с этим дела обстоят?
P.S. пример pak я уже проверил, чуть со стула не упал когда на использование памяти глянул smile.gif

и диапазон от 1000 до + бесконечности

Ну дак укажите входной массив который Вам надо и испробуйте функцию. Фильтр не использовал, только по той причине, что неизвестно установлен ли он у Вас.

Спустя 41 минута, 16 секунд (16.07.2012 - 19:56) Winston написал(а):
Так?
Свернутый текст
/**
*
@param $start integer
*
@param $end mixed (integer|string), "+" - бесконечность
*
@param $num число для проверки
*
@return bool
*/

function checkRange($start, $end, $num)
{
if($end == '+')
return $num >= $start ? true : false;
else
return
$num >= $start && $num <= $end ? true : false;
}

var_dump(checkRange(0, 9, 5));
var_dump(checkRange(300, 599, 299));
var_dump(checkRange(1000, '+', 1001));

Спустя 12 часов, 43 минуты, 25 секунд (17.07.2012 - 08:40) vagrand написал(а):
ИМХО, если диапазонов много, можно загнать их в БД и выполнить один запрос с исползованием between

Спустя 42 минуты, 21 секунда (17.07.2012 - 09:22) sergeiss написал(а):
Цитата (vagrand @ 17.07.2012 - 09:40)
можно загнать их в БД

Это предложение ненамного лучше, чем
Цитата (pak @ 16.07.2012 - 19:36)
можно через range - Создает массив, содержащий диапазон элементов

wink.gif

"По моему скромному разумению", после ответа Winston'а можно было уже не делать предположений насчет БД.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.