比较单个值与数组 - 替换数组中最接近数字的值

时间:2013-02-17 02:34:18

标签: php arrays math

标题冗长而令人困惑,原谅我。

$array = (1,5,10,25,50);
$x = 8

如何将$ x与数组中的每个值进行比较,然后选择最接近匹配的值。

在这种情况下,它将是10。

我想象创建一些if语句,但认为可以有更好的方法来做到这一点。

提前致谢

2 个答案:

答案 0 :(得分:1)

另一种方法,使用具有差异的中间数组:

$diff = array();

foreach($array as $n)      
  $diff[$n] = abs($x - $n);  // key = number, value = difference

// get the key that contains the smallest difference
$closest = array_search(min($diff), $diff);

答案 1 :(得分:0)

$min = 0;
foreach ($array AS $i => $v) {
  if (abs($array[$min] - $x) > abs($v - $x))
    $min = $i;
  // you can optimize this with :
  if ($v == $x)
    break;
}
$closest = $array[$min];

这样的事情应该有用。