2013-07-22 49 views
0

最接近的值,可以说我有一个PHP回合数从阵列

$possibleTaxes = array(7,8,13,23); 

,然后我有一些类似的值13.05186.5等。我需要将返回给定数四舍五入功能从这些里面给出的阵列,以最接近值:

roundToValues(19,$possibleTaxes) //returns 23 
roundToValues(16,$possibleTaxes) //returns 13 

还额外选项仅舍入到更大的价值,即使较小的接近将是一件好事

回答

1

试试这个曾经

function roundToValues($search, $possibleTaxes) { 
$closest = null; 
foreach($possibleTaxes as $item) { 
    if($closest == null || abs($search - $closest) < abs($item - $search)) { 
    $closest = $item; 
    } 
    } 
return $closest; 
} 
+0

功能roundToValues($搜索,$候选条件){ \t为($ I = 0; $ I <计数($候选条件); $ I ++){ \t \t \t \t如果($候选条件[$ i]于> $搜索){ \t \t \t \t \t \t返回$ possibles [$ i]; \t \t \t \t } \t \t \t \t } \t } – WebsterDevelopine

0

为了圆才更大的价值:

<?php 
function roundToValues($target, $possibleTaxes) 
{ 
    rsort($possibleTaxes); 
    $index = 0; 
    foreach ($possibleTaxes as $i => $value) 
    { 
     if ($value < $target) 
     { 
      break; 
     } 
     else 
     { 
      $index = $i; 
     } 
    } 
    return $possibleTaxes[$index]; 
} 
$possibleTaxes = array(7,8,13,23); 
echo roundToValues(19,$possibleTaxes), "\n"; // output 23 
echo roundToValues(11,$possibleTaxes), "\n";// output 13 
0

你必须要找到你的电话号码,并各自为阵的号码之间的差值的绝对值。然后取最小差值的数字。

function roundToValues($tax, array $possibleTaxes) { 
    $differences = array(); 
    foreach($possibleTaxes as $possibleTax) { 
     $differences[ $possibleTax ] = abs($possibleTax - $tax); 
    } 
    return array_search(min($differences), $differences); 
} 

PHPFiddle working example

0
function roundToValues($no,$possibleTaxes){ 

      array_push($possibleTaxes,$no); 
      sort($possibleTaxes); 
      $x=array_search($no,$possibleTaxes); 
      if(([email protected]$possibleTaxes[$x-1]) > (@$possibleTaxes[$x+1]-$no)){ 
       return @$possibleTaxes[$x+1]; 
      } else { 
       return @$possibleTaxes[$x-1]; 
      } 



} 

$possibleTaxes = array(7,8,13,23); 
echo roundToValues(16,$possibleTaxes);