在数组中查找匹配或最接近的值

2022-08-30 08:44:42

对于给定的目标值,如何搜索并找到数组中最接近的值?

假设我有这个示例数组:

array(0, 5, 10, 11, 12, 20)

例如,当我使用目标值0搜索时,函数应返回0;当我用3搜索时,它将返回5;当我用14搜索时,它将返回12。


答案 1

将要搜索的数字作为第一个参数传入,并将数字数组传递给第二个参数:

function getClosest($search, $arr) {
   $closest = null;
   foreach ($arr as $item) {
      if ($closest === null || abs($search - $closest) > abs($item - $search)) {
         $closest = $item;
      }
   }
   return $closest;
}

答案 2

一种特殊的惰性方法是让PHP按到搜索数字的距离对数组进行排序:

$num = 3;    
$array = array(0, 5, 10, 11, 12, 20);
$smallest = [];

foreach ($array as $i) {
    $smallest[$i] = abs($i - $num);
}
asort($smallest);
print key($smallest);