我有一系列从0到59的数字,这些数字列在给定的步长值中。例如,如果我的Step值为5则系列变为。
0,5,10,15,20,25,30,35,40,45,50,55
(或者如果Step为3,它将变为0,3,6,9,12 ...... 59等)
现在我需要找到给定用户号码上最接近的匹配项。例如,如果我是用户号码18,19或20,那么最接近的匹配是20.如果用户号码是16,17那么它是15。 我假设步骤值为5的这个例子。但是如果它可以用于任何步长值,那么那将是很好的。
我该怎么做?
$step = 5;
$usernumber = 18;
$myseries = range(0, 59, $step);
foreach($myseries as $num) {
echo $num.'<br />';
//if($usernumber is close to $num) {
// echo 'Matching number is '.$num;
//}
}
答案 0 :(得分:3)
$step * round($usernumber / $step)
怎么样?
您需要检查$usernumber
的边界,并将其作为该部门的浮点数。
答案 1 :(得分:0)
试试这个
$step = 5;
$usernumber = 188;
$myseries = range(0, 59, $step);
$myseries = range(0, 59, 5);
$check = round($usernumber/$step) * $step;
if(in_array($check,$myseries))
echo "<br>".$check;
else
echo max($myseries);
答案 2 :(得分:0)
如果你的系列没有任何漏洞(如8, 9, 11
),那么你不需要遍历整个数组。这只是一个草案,所以不确定它是否100%正确,但我希望它可以提供帮助:
$usernumber = 18;
$min = 0;
$max = 60;
$step = 5;
$r = $usernumber % $step;
if ($r > $step / 2) {
$num = $usernumber + ($step - $r);
if ($num > $max) {
$num = $max - $max % $step;
}
}
else {
$num = $usernumber - ($step - $r);
if ($num < $min) {
$num = $min + $step - ($min % $step);
}
}
echo $num;