Php 匹配最近的号码

Php 匹配最近的号码,php,math,Php,Math,我有一系列从0到59的数字,它们被列为给定的步长值。例如,如果步长值为5,则序列变为 0,5,10,15,20,25,30,35,40,45,50,55 (或者,如果步骤是3,它会变成0、3、6、9、12……59等等) 现在,我需要找到给定用户号码上最接近的匹配项。例如,如果我输入了用户编号18、19或20,则最接近的匹配项是20。如果用户号码是16,17,那么是15。 我假设这个例子的阶跃值为5。但如果它可以是任何阶跃值,那就太好了 我该怎么做 $step = 5; $usernumber

我有一系列从0到59的数字,它们被列为给定的步长值。例如,如果步长值为5,则序列变为

0,5,10,15,20,25,30,35,40,45,50,55

(或者,如果步骤是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;
  //}
}
$step=5;
$usernumber=18;
$myseries=range(0,59,$step);
foreach($myseries作为$num){
回显$num.
; //如果($usernumber接近$num){ //echo'匹配号码为'.$num; //} }
那么
$step*round($usernumber/$step)


您需要检查
$usernumber
的边界,并将其作为除法的浮点数。

关于
$step*round($usernumber/$step)


您需要检查
$usernumber
的边界,并将其作为除法的浮点数。

关于
$step*round($usernumber/$step)


您需要检查
$usernumber
的边界,并将其作为除法的浮点数。

关于
$step*round($usernumber/$step)

您需要检查
$usernumber
的边界,并将其作为除法的浮点数。

试试这个

$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);
$step=5;
$usernumber=188;
$myseries=range(0,59,$step);
$myseries=范围(0,59,5);
$check=四舍五入($usernumber/$step)*$step;
if(在数组中($check,$myseries))
回显“
”$check; 其他的 echo max($myseries);
试试这个

$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);
$step=5;
$usernumber=188;
$myseries=range(0,59,$step);
$myseries=范围(0,59,5);
$check=四舍五入($usernumber/$step)*$step;
if(在数组中($check,$myseries))
回显“
”$check; 其他的 echo max($myseries);
试试这个

$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);
$step=5;
$usernumber=188;
$myseries=range(0,59,$step);
$myseries=范围(0,59,5);
$check=四舍五入($usernumber/$step)*$step;
if(在数组中($check,$myseries))
回显“
”$check; 其他的 echo max($myseries);
试试这个

$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);
$step=5;
$usernumber=188;
$myseries=range(0,59,$step);
$myseries=范围(0,59,5);
$check=四舍五入($usernumber/$step)*$step;
if(在数组中($check,$myseries))
回显“
”$check; 其他的 echo max($myseries);

如果序列中没有任何孔(如
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;
$usernumber=18;
$min=0;
$max=60;
$step=5;
$r=$usernumber%$step;
如果($r>$step/2){
$num=$usernumber+($step-$r);
如果($num>$max){
$num=$max-$max%$step;
}
}
否则{
$num=$usernumber-($step-$r);
如果($num<$min){
$num=$min+$step-($min%$step);
}
}
echo$num;

如果序列没有任何孔(如
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;
$usernumber=18;
$min=0;
$max=60;
$step=5;
$r=$usernumber%$step;
如果($r>$step/2){
$num=$usernumber+($step-$r);
如果($num>$max){
$num=$max-$max%$step;
}
}
否则{
$num=$usernumber-($step-$r);
如果($num<$min){
$num=$min+$step-($min%$step);
}
}
echo$num;

如果序列没有任何孔(如
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;
$usernumber=18;
$min=0;
$max=60;
$step=5;
$r=$usernumber%$step;
如果($r>$step/2){
$num=$usernumber+($step-$r);
如果($num>$max){
$num=$max-$max%$step;
}
}
否则{
$num=$usernumber-($step-$r);
如果($num<$min){
$num=$min+$step-($min%$step);
}
}
echo$num;

如果序列没有任何孔(如
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;
$usernumber=18;
$min=0;
$max=60;
$step=5;
$r=$usernumber%$step;
如果($r>$step/2){
$num=$usernumber+($step-$r);
如果($num>$max){
$num=$max-$max%$step;
}
}
否则{
$num=$usernumber-($step-$r);
如果($num<$min){
$num=$min+$step-($min%$step);
}
}
echo$num;


步长值是否会被修正?谁来决定步长值?它将如何改变?是的,它将被修复。。。e、 g.$step=5;更新了上面的代码。比看到这个问题,我想是你需要的相同..是步骤值将被修复?谁来决定步长值?它将如何改变?是的,它将被修复。。。e、 g.$step=5;更新了上面的代码。比看到这个问题,我想是你需要的相同..是步骤值将被修复?谁来决定步长值?它将如何改变?是的,它将被修复。。。e、 g.$step=5;更新了上面的代码。比看到这个问题,我想是你需要的相同..是步骤值将被修复?谁来决定步长值?它将如何改变?是的,它将被修复。。。e、 g.$step=5;更新了上面的代码。看到这个问题,我想你需要的是一样的。太好了,看起来这就是我需要的。让我测试一下。这会粉碎任何循环尝试,smartGreat-看起来这就是我需要的。让我测试一下。这会粉碎任何循环尝试,smartGreat-看起来这就是我需要的。让我测试一下。这会粉碎任何循环尝试,smartGreat-看起来这就是我需要的。让我测试一下