如何检查数字是否在给定范围内
How to check if a number falls in a given range
我有一个变量$user_id
(数值)
想要检查 $user_id
是否在 1 - 1000 或 1001 - 2000 或 2001 - 3000 .... 99001 - 100000
范围内
- 有没有办法不用在 PHP 中写 100 个
switch
或 if
语句就可以做到这一点?
- 找到匹配项后,执行代码。
我知道这需要 while 和 for 循环。但无法正确编码。
这是最简单的方法:
$check = 0;
$nextCheck = $check+1001;
while ($check < 100001) {
If ($user_id > $check && $user_id < $nextCheck) {
// Code ...
break;
} else {
$check+=1000;
$nextCheck+=1000;
}
}
您可以将数字除以 1000
,因为您有一个连续的 1000 间隔范围。
quotient * 1000 + 1
是间隔的起始值,具有可被 1000 整除的数字的特殊极端情况,这将只是间隔的边界结束。
<?php
$tests = [1,999,1000,50001,100000,2999];
foreach($tests as $test_case){
$quotient = intval($test_case / 1000);
if($test_case % 1000 === 0){
$start = $test_case - 1000 + 1;
echo "$test_case : Range: ($start - $test_case)",PHP_EOL;
}else{
$start = $quotient * 1000 + 1;
$end = ($quotient + 1) * 1000;
echo "$test_case : Range: ($start - $end)",PHP_EOL;
}
}
输出:
1 : Range: (1 - 1000)
999 : Range: (1 - 1000)
1000 : Range: (1 - 1000)
50001 : Range: (50001 - 51000)
100000 : Range: (99001 - 100000)
2999 : Range: (2001 - 3000)
不生成数组。不要使用循环。使用数学确定范围的上限,然后从该数字中减去 999
- 完成。
*我的代码片段假设我们只处理 1 到 100000 之间的正值。
代码:(Demo)
$tests = [1, 999, 1000, 50001, 100000, 2999];
foreach ($tests as $test) {
$upper = intval(($test - 1) / 1000) * 1000 + 1000;
echo "$test is between " . ($upper - 999) . " and $upper\n";
}
输出:
1 is between 1 and 1000
999 is between 1 and 1000
1000 is between 1 and 1000
50001 is between 50001 and 51000
100000 is between 99001 and 100000
2999 is between 2001 and 3000
公式分解:
intval( #3) remove decimals from difference
($test - 1) #1) subtract one
/ 1000 #2) divide by 1000
)
* 1000 #4) multiply integer by 1000
+ 1000 #5) add 1000
我有一个变量$user_id
(数值)
想要检查 $user_id
是否在 1 - 1000 或 1001 - 2000 或 2001 - 3000 .... 99001 - 100000
- 有没有办法不用在 PHP 中写 100 个
switch
或if
语句就可以做到这一点? - 找到匹配项后,执行代码。
我知道这需要 while 和 for 循环。但无法正确编码。
这是最简单的方法:
$check = 0;
$nextCheck = $check+1001;
while ($check < 100001) {
If ($user_id > $check && $user_id < $nextCheck) {
// Code ...
break;
} else {
$check+=1000;
$nextCheck+=1000;
}
}
您可以将数字除以 1000
,因为您有一个连续的 1000 间隔范围。
quotient * 1000 + 1
是间隔的起始值,具有可被 1000 整除的数字的特殊极端情况,这将只是间隔的边界结束。
<?php
$tests = [1,999,1000,50001,100000,2999];
foreach($tests as $test_case){
$quotient = intval($test_case / 1000);
if($test_case % 1000 === 0){
$start = $test_case - 1000 + 1;
echo "$test_case : Range: ($start - $test_case)",PHP_EOL;
}else{
$start = $quotient * 1000 + 1;
$end = ($quotient + 1) * 1000;
echo "$test_case : Range: ($start - $end)",PHP_EOL;
}
}
输出:
1 : Range: (1 - 1000)
999 : Range: (1 - 1000)
1000 : Range: (1 - 1000)
50001 : Range: (50001 - 51000)
100000 : Range: (99001 - 100000)
2999 : Range: (2001 - 3000)
不生成数组。不要使用循环。使用数学确定范围的上限,然后从该数字中减去 999
- 完成。
*我的代码片段假设我们只处理 1 到 100000 之间的正值。
代码:(Demo)
$tests = [1, 999, 1000, 50001, 100000, 2999];
foreach ($tests as $test) {
$upper = intval(($test - 1) / 1000) * 1000 + 1000;
echo "$test is between " . ($upper - 999) . " and $upper\n";
}
输出:
1 is between 1 and 1000
999 is between 1 and 1000
1000 is between 1 and 1000
50001 is between 50001 and 51000
100000 is between 99001 and 100000
2999 is between 2001 and 3000
公式分解:
intval( #3) remove decimals from difference
($test - 1) #1) subtract one
/ 1000 #2) divide by 1000
)
* 1000 #4) multiply integer by 1000
+ 1000 #5) add 1000