Wie kann ich überprüfen, ob eine bestimmte Nummer innerhalb eines Nummernbereichs liegt?
Wie kann ich überprüfen, ob eine bestimmte Nummer innerhalb eines Nummernbereichs liegt?
Antworten:
Der Ausdruck:
($min <= $value) && ($value <= $max)
wird wahr sein, wenn $value
zwischen $min
und $max
einschließlich ist
Weitere Informationen zu Vergleichsoperatoren finden Sie in den PHP-Dokumenten
$value
es sich um ein Float handelt. Da auch der Vergleich lose ist, kann zu falsch Ergebnis einen String übergeben, zum Beispiel (0 <= 'string') && ('string' <= 10) );
ist true
aufgrund Jonglieren geben.
(int)
Darsteller einbeziehen. In diesem Fall würde ich mich wahrscheinlich dafür entscheiden, sie wegzulassen.
Sie können verwenden filter_var
filter_var(
$yourInteger,
FILTER_VALIDATE_INT,
array(
'options' => array(
'min_range' => $min,
'max_range' => $max
)
)
);
Auf diese Weise können Sie auch angeben, ob Sie die Oktal- und Hex-Notation von Ganzzahlen zulassen möchten . Beachten Sie, dass die Funktion typsicher ist. 5.5
ist keine Ganzzahl, sondern ein Float und wird nicht validiert.
Ausführliches Tutorial zum Filtern von Daten mit PHP:
Könnte helfen:
if ( in_array(2, range(1,7)) ) {
echo 'Number 2 is in range 1-7';
}
Sie könnten eine kleine Hilfsfunktion entwickeln, um dies zu tun:
/**
* 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;
}
Und du würdest es so benutzen:
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)) {
Möglicherweise möchten Sie die Vergleichsoperatoren anpassen, wenn die Grenzwerte nicht gültig sein sollen.
mit einem Schaltergehäuse
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;
}
switch(true)
, andernfalls wenn $num == 0
die Falllogik fehlschlägt, weil PHP versucht, übereinzustimmen 0 == ($num>= $value1 && $num<= $value2)
usw. Ich habe dies als Bearbeitung vorgeschlagen.
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";
}
Tatsächlich wird dies verwendet, um einen Wert umzuwandeln, der außerhalb des Bereichs zum nächstgelegenen Ende liegt.
$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)
Eine andere Möglichkeit, dies mit einem einfachen if / else-Bereich zu tun. Zum Beispiel:
$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;
}
Ich habe eine Funktion erstellt, um zu überprüfen, ob sich die Zeiten in einem Array irgendwie überschneiden:
/**
* 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 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