programing

PHP에서 정수가 숫자의 범위 내에 있는지 확인하는 방법은 무엇입니까?

bestcode 2022. 9. 19. 23:47
반응형

PHP에서 정수가 숫자의 범위 내에 있는지 확인하는 방법은 무엇입니까?

특정 번호가 번호 범위 내에 있는지 확인하려면 어떻게 해야 하나요?

표현:

 ($min <= $value) && ($value <= $max)

만약 그렇다면 사실일 것이다$value사이에 있다$min그리고.$max(포함)

비교 연산자에 대한 자세한 내용은 PHP 문서를 참조하십시오.

사용할 수 있습니다.

filter_var(
    $yourInteger, 
    FILTER_VALIDATE_INT, 
    array(
        'options' => array(
            'min_range' => $min, 
            'max_range' => $max
        )
    )
);

또한 정수의 8진수 표기16진수 표기 허용 여부도 지정할 수 있습니다.기능은 타입 세이프입니다. 5.5는 정수가 아닌 플로트이며 검증되지 않습니다.

PHP를 사용한 데이터 필터링에 대한 자세한 튜토리얼:

도움이 될 수 있습니다.

if ( in_array(2, range(1,7)) ) {
    echo 'Number 2 is in range 1-7';
}

http://php.net/manual/en/function.range.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 <= $max)
            : ($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 <= $upper_boundary)) {

경계 값이 유효하지 않도록 하려면 비교 연산자를 조정할 수 있습니다.

기타 가능성:

if (in_array($value, range($min, $max), true)) {
    echo "You can be sure that $min <= $value <= $max";
}

또는 다음 중 하나를 선택합니다.

if ($value === min(max($value, $min), $max)) {
    echo "You can be sure that $min <= $value <= $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)

다음의 1개의 스테이트먼트를 시험할 수 있습니다.

if (($x-$min)*($x-$max) < 0)

또는 다음과 같이 입력합니다.

if (max(min($x, $max), $min) == $x)

스위치 케이스 사용

    switch ($num){

        case ($num>= $value1 && $num<= $value2): 
            echo "within range 1";
        break;
        case ($num>= $value3 && $num<= $value4): 
            echo "within range 2";
        break;
        .
        .
        .
        .
        .

        default: //default
            echo "within no range";
        break;
     }

간단한 if/else 범위를 사용하여 이를 수행하는 또 다른 방법입니다.예:

$watermarkSize = 0;

if (($originalImageWidth >= 0) && ($originalImageWidth <= 640)) {
    $watermarkSize = 10;
} else if (($originalImageWidth >= 641) && ($originalImageWidth <= 1024)) {
    $watermarkSize = 25;
} else if (($originalImageWidth >= 1025) && ($originalImageWidth <= 2048)) {
    $watermarkSize = 50;
} else if (($originalImageWidth >= 2049) && ($originalImageWidth <= 4096)) {
    $watermarkSize = 100;
} else {
    $watermarkSize = 200;
}

배열의 시간이 겹치는지 확인하는 기능을 만들었습니다.

    /**
     * Function to check if there are overlapping times in an array of \DateTime objects.
     *
     * @param $ranges
     *
     * @return \DateTime[]|bool
     */
    public function timesOverlap($ranges) {
        foreach ($ranges as $k1 => $t1) {
            foreach ($ranges as $k2 => $t2) {
                if ($k1 != $k2) {
                    /* @var \DateTime[] $t1 */
                    /* @var \DateTime[] $t2 */
                    $a = $t1[0]->getTimestamp();
                    $b = $t1[1]->getTimestamp();
                    $c = $t2[0]->getTimestamp();
                    $d = $t2[1]->getTimestamp();

                    if (($c >= $a && $c <= $b) || $d >= $a && $d <= $b) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

여기 저의 작은 공헌이 있습니다.

function inRange($number) {
  $ranges = [0, 13, 17, 24, 34, 44, 54, 65, 200];
  $n = count($ranges);

  while($n--){
    if( $number > $ranges[$n] )
      return $ranges[$n]+1 .'-'. $ranges[$n + 1];
  }

나는 내 경우에 맞는 기능이 있다.

용도:

echo checkRangeNumber(0);
echo checkRangeNumber(1);
echo checkRangeNumber(499);
echo checkRangeNumber(500);
echo checkRangeNumber(501);
echo checkRangeNumber(3001);
echo checkRangeNumber(999);

//반환

0
1-500
1-500
1-500
501-1000
3000-3500
501-1000

function checkRangeNumber($number, $per_page = 500)
{
    //$per_page = 500; // it's fixed number, but... 

    if ($number == 0) {
        return "0";
    }

    $num_page = ceil($number / $per_page); // returns 65
    $low_limit = ($num_page - 1) * $per_page + 1; // returns 32000
    $up_limit = $num_page * $per_page; // returns 40
    return  "$low_limit-$up_limit";
}

간단한 도우미 기능을 만들었습니다.

if ( !function_exists('number_between') )
{
    /**
     * number_between
     * 
     * @param {integer} $number
     * @param {array} $range [min, max]
     * @return {boolean}
     */
    function number_between(
            int $number, 
            array $range
    ){
        
        if(
                count($range) !== 2 || 
                is_numeric($range[0]) === FALSE || 
                is_numeric($range[1]) === FALSE
        ){
            throw new \Exception("number_between second parameter must contain two numbers.", E_WARNING);
        }
        
        if( 
                in_array($number, range($range[0], $range[1]))
        ){
            return TRUE;
        }else{
            return FALSE;
        }
    }
    
}
function limit_range($num, $min, $max)
{
  // Now limit it
  return $num>$max?$max:$num<$min?$min:$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

정말 감사합니다.그리고 앞바퀴 루프에 브레이크가 추가되어 답변을 얻었고, 지금은 정상적으로 동작하고 있습니다.

갱신된 답변은 다음과 같습니다.

foreach ($this->crud->getDataAll('shipping_charges') as $ship) {
  if ($weight >= $ship->low && $weight <= $ship->high) {
      $val = $ship->amount;
      break;
      }
      else
      {
        $val = 900;
      }
     }
     echo $val ;
$ranges = [
    1 => [
        'min_range' => 0.01,
        'max_range' => 199.99
    ],
    2 => [
        'min_range' => 200.00,
    ],
];

foreach($ranges as $value => $range){
    if(filter_var($cartTotal, FILTER_VALIDATE_FLOAT, ['options' => $range])){
        return $value;
    }
}

언급URL : https://stackoverflow.com/questions/4684023/how-to-check-if-an-integer-is-within-a-range-of-numbers-in-php

반응형