Nein, wird es nicht. Beide Vergleichsoperatoren sollten <= sein, oder die Operanden des zweiten Teils des Ausdrucks sollten ausgetauscht werden. ($ value sollte nicht größer als $ max sein).
GolezTrol
Sie müssen diesen Kommentar hinzugefügt haben, während ich meinen Fehler korrigierte ... dieser Ausdruck ist jetzt korrekt
Dancrumb
3
Abhängig davon, ob das OP wirklich "Ganzzahl" bedeutet, wenn nach "Ganzzahl" gefragt wird, führt dies zu falschen Ergebnissen, wenn $valuees 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 trueaufgrund Jonglieren geben.
Gordon
@ Gordon, nur wenn Sie möchten, dass die Grenzwerte inklusiv behandelt werden ... aber dennoch ein gültiger Punkt
Dancrumb
Zwar benötigt der PHP-Interpreter keine Klammern, es ist jedoch eine Frage des Stils, ob dies für Ingenieure hilfreich ist. Persönlich mag ich die explizite Natur der Klammern in diesem Ausdruck und ich denke nicht, dass sie Unordnung hinzufügen. Ich denke jedoch, dass sie sich laut anfühlen würden, wenn Sie die (int)Darsteller einbeziehen. In diesem Fall würde ich mich wahrscheinlich dafür entscheiden, sie wegzulassen.
Bemerkenswert ist, dass aufgrund der Erzeugung des Bereichs Speicherkosten anfallen.
Dancrumb
1
Einfache und elegante Lösung. Lief wie am Schnürchen.
pr1nc3
2
@ pr1nc3, aber diese Lösung ist sehr langsam und sehr speicherhungrig, wenn es sich um einen großen Bereich handelt.
Hanshenrik
13
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
*/functionin_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) ;
}
returnFALSE;
}
Sollte sein switch(true), andernfalls wenn $num == 0die Falllogik fehlschlägt, weil PHP versucht, übereinzustimmen 0 == ($num>= $value1 && $num<= $value2)usw. Ich habe dies als Bearbeitung vorgeschlagen.
Zane
1
Einige andere Möglichkeiten:
if (in_array($value, range($min, $max), true)) {
echo"You can be sure that $min <= $value <= $max";
}
Oder:
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);
Beispiel
/**
* 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)
functionlimit_range($num, $min, $max)
{
// Now limit itreturn $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 4echo 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
Antworten:
Der Ausdruck:
wird wahr sein, wenn
$value
zwischen$min
und$max
einschließlich istWeitere Informationen zu Vergleichsoperatoren finden Sie in den PHP-Dokumenten
quelle
$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) );
isttrue
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:
quelle
Könnte helfen:
if ( in_array(2, range(1,7)) ) { echo 'Number 2 is in range 1-7'; }
http://php.net/manual/en/function.range.php
quelle
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...
quelle
if (($num >= $lower_boundary) && ($num <= $upper_boundary)) {
Möglicherweise möchten Sie die Vergleichsoperatoren anpassen, wenn die Grenzwerte nicht gültig sein sollen.
quelle
Sie können die folgende One-Anweisung ausprobieren:
if (($x-$min)*($x-$max) < 0)
oder:
if (max(min($x, $max), $min) == $x)
quelle
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; }
quelle
switch(true)
, andernfalls wenn$num == 0
die Falllogik fehlschlägt, weil PHP versucht, übereinzustimmen0 == ($num>= $value1 && $num<= $value2)
usw. Ich habe dies als Bearbeitung vorgeschlagen.Einige andere Möglichkeiten:
if (in_array($value, range($min, $max), true)) { echo "You can be sure that $min <= $value <= $max"; }
Oder:
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.
Beispiel
/** * 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)
quelle
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; }
quelle
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; }
quelle
Hier ist mein kleiner Beitrag:
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]; }
quelle
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
quelle