Как проверить, находится ли целое число в пределах диапазона?
Есть ли способ проверить диапазон, не делая этого избыточного кода:
function testRange($int,$min,$max)
Есть ли такая встроенная функция PHP? Или любой другой способ сделать это?
Я не думаю, что вы получите лучший способ, чем ваша функция.
Это чисто, легко следовать и понимать и возвращает результат условия (нет return (. ) ? true : false mess).
Протестировал 3 пути с циклом 1000000 раз.
t2_test2: (in_array($val, range($min, $max)) : 9.3301 ms
t3_test3: (max(min($var, $max), $min) == $val) : 0.7272 ms
T1 был самым быстрым, это было главным образом:
function t1($val, $min, $max) < return ($val >= $min && $val
Нет встроенной функции, но вы можете легко достичь ее, вызвав функции min() и max() соответственно.
// Limit integer between 1 and 100000 $var = max(min($var, 100000), 1);
Большинство из приведенных примеров предполагают, что для тестового диапазона [$ a .. $ b], $ a Но мне нужна была функция, чтобы проверить, было ли $ n между $ a и $ b, как описано здесь:
Check if $n is between $a and $b even if: $a < $b $a >$b $a = $b All numbers can be real, not only integer.
Существует простой способ тестирования.
Я основываю его на том, что ($n-$a) и ($n-$b) имеют разные знаки, когда $ n находится между $ a и $ b, и тот же знак, когда $ n находится вне $ a .. диапазон $ b.
Эта функция действительна для тестирования увеличения, уменьшения, положительного и отрицательного числа, не ограничиваясь проверкой только целочисленных чисел.
Также есть filter_var() и это встроенная функция, которая проверяет диапазон . Это не дает точно то, что вы хотите (никогда не возвращает true), но с «читом» мы можем его изменить.
Я не думаю, что это хороший код для удобства чтения, но я показываю, что это возможно:
return (filter_var($someNumber, FILTER_VALIDATE_INT, ['options' => ['min_range' => $min, 'max_range' => $max]]) !== false)
Просто заполните $someNumber , $min и $max . filter_var с этим фильтром возвращает либо логическое значение false, когда номер находится вне диапазона, либо сам номер, когда он находится в пределах диапазона. Выражение ( !== false ) делает функцию return true, когда число находится в пределах диапазона.
Если вы хотите как-то его укоротить, помните о типе кастинга. Если вы будете использовать != Это будет ложным для числа 0 в пределах диапазона -5; +5 (хотя это должно быть правдой). То же самое произойдет, если вы будете использовать тип casting ( (bool) ).
// EXAMPLE OF WRONG USE, GIVES WRONG RESULTS WITH "0" (bool)filter_var($someNumber, FILTER_VALIDATE_INT, ['options' => ['min_range' => $min, 'max_range' => $max]]) if (filter_var($someNumber, FILTER_VALIDATE_INT, ['options' => ['min_range' => $min, 'max_range' => $max]])) .
Представьте, что (из другого ответа):
if(in_array($userScore, range(-5, 5))) echo 'your score is correct'; else echo 'incorrect, enter again';
Если пользователь будет писать пустое значение ( $userScore = » ), это было бы правильно, так как in_array здесь задан по умолчанию, не строгий больше, а это означает, что диапазон также создает 0 , а » == 0 (нестрогий ), но » !== 0 (если вы будете использовать строгий режим). Легко пропустить такие вещи, и именно поэтому я немного написал об этом. Я узнал, что строгие операторы по умолчанию, а программист может использовать нестрогий только в особых случаях . Я думаю, что это хороший урок. Большинство примеров здесь могут быть неудачными в некоторых случаях из-за нестрогой проверки.
Тем не менее мне нравится filter_var, и вы можете использовать выше (или ниже, если бы я получил так «вверх»;)) и сделать свой собственный обратный вызов, который вы использовали бы как фильтр FILTER_CALLBACK . Вы можете вернуть bool или даже добавить параметр openRange . И еще одна хорошая точка: вы можете использовать другие функции , например, проверку диапазона каждого числа массивов или значений POST / GET. Это действительно мощный инструмент.
Использование операторов сравнения – это путь, способ быстрее, чем вызов любой функции. Я не уверен на 100%, если это существует, но я думаю, что это не так.
Я не могу комментировать (недостаточно репутации), поэтому я исправлю ответ Луиса Розети:
Эта функция работает также в случаях, когда n == a или n == b.
Доказательство. Пусть n принадлежит диапазону [a, b], где [a, b] – подмножество вещественных чисел.
Вы можете сделать это, используя in_array() сочетании с range()
if (in_array($value, range($min, $max))) < // Value is in range >
Примечание. Как уже отмечалось в комментариях, это не совсем отличное решение, если вы сосредоточены на производительности. Генерация массива (особенно с большими диапазонами) замедлит выполнение.
Как проверить, находится ли целое число в диапазоне чисел в PHP?
Как я могу проверить, находится ли данный номер в диапазоне номеров?
будет истинным, если $value находится между $min и $max , включительно
Дополнительную информацию о операторах сравнения см. В документах PHP
Вы можете использовать filter_var
filter_var( $yourInteger, FILTER_VALIDATE_INT, array( 'options' => array( 'min_range' => $min, 'max_range' => $max ) ) );
Это также позволит вам указать, хотите ли вы разрешать восьмеричные и шестнадцатеричные обозначения целых чисел . Обратите внимание, что функция безопасна по типу. 5.5 не является целым числом, а является float и не будет проверяться.
Подробное руководство по фильтрации данных с помощью PHP:
Вы можете поднять небольшую вспомогательную функцию, чтобы сделать это:
/** * Determines if $number is between $min and $max * * @param integer $number The number to test * @param integer $min The minimum value in the range * @param integer $max The maximum value in the range * @param boolean $inclusive Whether the range should be inclusive or not * @return boolean Whether the number was in the range */ function in_range($number, $min, $max, $inclusive = FALSE) < if (is_int($number) && is_int($min) && is_int($max)) < return $inclusive ? ($number >= $min && $number $min && $number < $max) ; >return FALSE; >
И вы будете использовать его так:
var_dump(in_range(5, 0, 10)); // TRUE var_dump(in_range(1, 0, 1)); // FALSE var_dump(in_range(1, 0, 1, TRUE)); // TRUE var_dump(in_range(11, 0, 10, TRUE)); // FALSE // etc.
if (($num >= $lower_boundary) && ($num
Вы можете настроить операторы сравнения, если вы хотите, чтобы граничные значения не были действительными.
Вы можете попробовать следующее одно заявление:
Некоторые другие возможности:
if (in_array($value, range($min, $max), true))
Или:
if ($value === min(max($value, $min), $max))
На самом деле это то, что используется, чтобы отличить значение, находящееся вне диапазона, до ближайшего конца.
$value = min(max($value, $min), $max);
пример
/** * This is un-sanitized user input. */ $posts_per_page = 999; /** * Sanitize $posts_per_page. */ $posts_per_page = min(max($posts_per_page, 5), 30); /** * Use. */ var_dump($posts_per_page); // Output: int(30)
с использованием корпуса переключателя
switch ($num)< case ($num>= $value1 && $num= $value3 && $num
Другой способ сделать это с простым диапазоном if / else. Например:
$watermarkSize = 0; if (($originalImageWidth >= 0) && ($originalImageWidth else if (($originalImageWidth >= 641) && ($originalImageWidth else if (($originalImageWidth >= 1025) && ($originalImageWidth else if (($originalImageWidth >= 2049) && ($originalImageWidth else
function limit_range($num, $min, $max) < // Now limit it return $num>$max?$max:$num $min = 0; // Minimum number can be $max = 4; // Maximum number can be $num = 10; // Your number // Number returned is limited to be minimum 0 and maximum 4 echo limit_range($num, $min, $max); // return 4 $num = 2; echo limit_range($num, $min, $max); // return 2 $num = -1; echo limit_range($num, $min, $max); // return 0
Как проверить, находится ли целое число в диапазоне чисел в PHP?
Как я могу проверить, находится ли данный номер в диапазоне номеров?
будет истинным, если $value находится между $min и $max , включительно
Дополнительную информацию о операторах сравнения см. В документах PHP
Вы можете использовать filter_var
filter_var( $yourInteger, FILTER_VALIDATE_INT, array( 'options' => array( 'min_range' => $min, 'max_range' => $max ) ) );
Это также позволит вам указать, хотите ли вы разрешать восьмеричные и шестнадцатеричные обозначения целых чисел . Обратите внимание, что функция безопасна по типу. 5.5 не является целым числом, а является float и не будет проверяться.
Подробное руководство по фильтрации данных с помощью PHP:
Вы можете поднять небольшую вспомогательную функцию, чтобы сделать это:
/** * Determines if $number is between $min and $max * * @param integer $number The number to test * @param integer $min The minimum value in the range * @param integer $max The maximum value in the range * @param boolean $inclusive Whether the range should be inclusive or not * @return boolean Whether the number was in the range */ function in_range($number, $min, $max, $inclusive = FALSE) < if (is_int($number) && is_int($min) && is_int($max)) < return $inclusive ? ($number >= $min && $number $min && $number < $max) ; >return FALSE; >
И вы будете использовать его так:
var_dump(in_range(5, 0, 10)); // TRUE var_dump(in_range(1, 0, 1)); // FALSE var_dump(in_range(1, 0, 1, TRUE)); // TRUE var_dump(in_range(11, 0, 10, TRUE)); // FALSE // etc.
if (($num >= $lower_boundary) && ($num
Вы можете настроить операторы сравнения, если вы хотите, чтобы граничные значения не были действительными.
Вы можете попробовать следующее одно заявление:
Некоторые другие возможности:
if (in_array($value, range($min, $max), true))
Или:
if ($value === min(max($value, $min), $max))
На самом деле это то, что используется, чтобы отличить значение, находящееся вне диапазона, до ближайшего конца.
$value = min(max($value, $min), $max);
пример
/** * This is un-sanitized user input. */ $posts_per_page = 999; /** * Sanitize $posts_per_page. */ $posts_per_page = min(max($posts_per_page, 5), 30); /** * Use. */ var_dump($posts_per_page); // Output: int(30)
с использованием корпуса переключателя
switch ($num)< case ($num>= $value1 && $num= $value3 && $num
Другой способ сделать это с простым диапазоном if / else. Например:
$watermarkSize = 0; if (($originalImageWidth >= 0) && ($originalImageWidth else if (($originalImageWidth >= 641) && ($originalImageWidth else if (($originalImageWidth >= 1025) && ($originalImageWidth else if (($originalImageWidth >= 2049) && ($originalImageWidth else
function limit_range($num, $min, $max) < // Now limit it return $num>$max?$max:$num $min = 0; // Minimum number can be $max = 4; // Maximum number can be $num = 10; // Your number // Number returned is limited to be minimum 0 and maximum 4 echo limit_range($num, $min, $max); // return 4 $num = 2; echo limit_range($num, $min, $max); // return 2 $num = -1; echo limit_range($num, $min, $max); // return 0