Php if integer between

Как проверить, находится ли целое число в пределах диапазона?

Есть ли способ проверить диапазон, не делая этого избыточного кода:

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 

Источник

Читайте также:  Python словарь типы ключей
Оцените статью