在数组中查找匹配或最接近的值
对于给定的目标值,如何搜索并找到数组中最接近的值?
假设我有这个示例数组:
array(0, 5, 10, 11, 12, 20)
例如,当我使用目标值0搜索时,函数应返回0;当我用3搜索时,它将返回5;当我用14搜索时,它将返回12。
对于给定的目标值,如何搜索并找到数组中最接近的值?
假设我有这个示例数组:
array(0, 5, 10, 11, 12, 20)
例如,当我使用目标值0搜索时,函数应返回0;当我用3搜索时,它将返回5;当我用14搜索时,它将返回12。
将要搜索的数字作为第一个参数传入,并将数字数组传递给第二个参数:
function getClosest($search, $arr) {
$closest = null;
foreach ($arr as $item) {
if ($closest === null || abs($search - $closest) > abs($item - $search)) {
$closest = $item;
}
}
return $closest;
}
一种特殊的惰性方法是让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);