Потребовалось проверить, входит ли заданное число в один из имеющихся диапазонов. Т.е., имеется:
диапазон от 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) и т.п. Я даже боюсь предположить, сколько памяти на сервере займет массив с числами из последнего диапазона... Или я что-то не так понял?
Спустя 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 это здорово, но даже приближаться к нему не хотелось бы
I++, в Вашем примере как с этим дела обстоят?
P.S. пример pak я уже проверил, чуть со стула не упал когда на использование памяти глянул
I++, в Вашем примере как с этим дела обстоят?
P.S. пример pak я уже проверил, чуть со стула не упал когда на использование памяти глянул
Спустя 1 минута, 49 секунд (16.07.2012 - 19:15) I++ написал(а):
Цитата (vagon @ 16.07.2012 - 20:13) |
PHP_MAX_INT это здорово, но даже приближаться к нему не хотелось бы I++, в Вашем примере как с этим дела обстоят? P.S. пример pak я уже проверил, чуть со стула не упал когда на использование памяти глянул |
и диапазон от 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 - Создает массив, содержащий диапазон элементов |
"По моему скромному разумению", после ответа Winston'а можно было уже не делать предположений насчет БД.