PHP: ¿Cómo puedo determinar si una variable tiene un valor que se encuentra entre dos valores constantes distintos?

1 minuto de lectura

avatar de usuario
gabriel meono

¿Cómo puedo determinar usando código PHP que, por ejemplo, tengo una variable que tiene un valor?

  • entre 1 y 10, o
  • entre 20 y 40?

  • ¡No, no entiendo la idea! ¿Te refieres a “elegir un número aleatorio entre 1 y 10”? ¿O “calcular el valor a mitad de camino entre 1 y 10”? ¿O algo mas?

    –Oliver Charlesworth

    13 de abril de 2011 a las 23:02

  • Tu pregunta no es clara. quiero obtener un valor aleatorio entre 1 a 10 o 20 a 40 o quieres prueba si algún valor está en estos rangos? ¿O incluso algo más?

    – Félix Kling

    13 de abril de 2011 a las 23:02


  • Lo sé, a PHP realmente le vendría bien el equivalente SQL de la instrucción BETWEEN. No es difícil hacer un if(x>=1 && x

    –Justin Levene

    19 de noviembre de 2020 a las 10:51

avatar de usuario
Daniel A. Blanco

if (($value > 1 && $value < 10) || ($value > 20 && $value < 40))

  • Omite el hecho de que el número podría ser 1 o 10, 20 o 40.

    – Sangre vikinga

    02/09/2016 a las 16:01

  • @VikingBlooded llegó a amar la ambigüedad del inglés y cometió un error

    – Daniel A. Blanco

    02/09/2016 a las 16:03

  • ¿No hay una función de ayuda para verificar un número entre 2 números en PHP?

    – Ebrahim Bashirpur

    14 de febrero de 2021 a las 8:56

avatar de usuario
Ryan

¿Quieres decir como:

$val1 = rand( 1, 10 ); // gives one integer between 1 and 10
$val2 = rand( 20, 40 ) ; // gives one integer between 20 and 40

o quizás:

$range = range( 1, 10 ); // gives array( 1, 2, ..., 10 );
$range2 = range( 20, 40 ); // gives array( 20, 21, ..., 40 );

o tal vez:

$truth1 = $val >= 1 && $val <= 10; // true if 1 <= x <= 10
$truth2 = $val >= 20 && $val <= 40; // true if 20 <= x <= 40

supongamos que quisieras:

$in_range = ( $val > 1 && $val < 10 ) || ( $val > 20 && $val < 40 ); // true if 1 < x < 10 OR 20 < x < 40

Puedes hacerlo:

if(in_array($value, range(1, 10)) || in_array($value, range(20, 40))) {
   # enter code here
}

  • Esto parece muy limpio, pero tenga en cuenta que, por ejemplo, probar un precio entre uno y un millón significa crear una matriz con millones de elementos. Acabo de medir en ambos sentidos con microtime() y este parece funcionar alrededor de 2000 veces más lento para un rango tan grande y al mismo tiempo consume mucha memoria.

    – Josef Habr

    14 oct 2020 a las 12:25

Adivinando a partir de la etiqueta ‘operando’, ¿quiere verificar un valor?

$myValue = 5;
$minValue = 1;
$maxValue = 10;

if ($myValue >= $minValue && $myValue <= $maxValue) { 
  //do something
}

Si solo desea verificar que el valor esté en el rango, use esto:

   MIN_VALUE = 1;
   MAX_VALUE = 100;
   $customValue = min(MAX_VALUE,max(MIN_VALUE,$customValue)));

  • Esto no verifica que el valor esté entre el rango, devuelve un nuevo valor que estará entre el rango.

    – Gonzalingui

    19 de diciembre de 2019 a las 16:39

Prueba esto

if (($val >= 1 && $val <= 10) || ($val >= 20 && $val <= 40))

This will return the value between 1 to 10 & 20 to 40.

  • Esto no verifica que el valor esté entre el rango, devuelve un nuevo valor que estará entre el rango.

    – Gonzalingui

    19 de diciembre de 2019 a las 16:39

avatar de usuario
Jáder Carvalho de Medeiros

Perdón por la respuesta tardía, pero esta función le permite hacer eso.

  function int_between($value, $start, $end) {
    return in_array($value, range($start, $end));
  }

  // Example
  $value1 = 20;
  $value2 = 40;
  echo int_between(20, $value1, $value2) ? "true" : "false";

¿Ha sido útil esta solución?