提问人:ShibeSon 提问时间:1/7/2023 更新时间:1/7/2023 访问量:34
在具有多个结果的数组中查找匹配或最接近的值 php
Find a matching or closest value in an array with multiple results php
问:
我正在尝试找出一种方法来在具有多个结果的 php 数组中获取匹配或最接近的值。
假设我有一个这样的数组:
$arr = [0, 2, 4, 6, 8, 10, 13, 100];
我想得到最接近 3 的值。 这应该输出 2 和 4,因为它们同样接近。
我使用了另一个答案中的一些代码块,但这个答案只输出一个最终值;本例中为 2。
function getClosest($search, $arr) {
$closest = null;
foreach ($arr as $item) {
if ($closest === null || abs($search - $closest) > abs($item - $search)) {
$closest = $item;
}
}
return $closest;
}
我怎样才能创建一个可以帮助我实现目标的功能?
谢谢。
答:
0赞
Joffrey Schmitz
1/7/2023
#1
由于您可以返回多个数字,因此结果变量必须是一个数组(其中可能只有一个值)。
然后,您只需要添加一个分支来检测相等性:
function getClosest($search, $arr) {
$closest = array();
foreach ($arr as $item) {
if (count($closest) == 0 || abs($search - $closest[0]) > abs($item - $search)) {
$closest = array(); // new minimal difference, reset array
$closest[] = $item ; // add new best candidate as first item of the list
}
elseif(abs($search - $closest[0]) == abs($item - $search))
{
// same difference, add item to closest list
$closest[] = $item ;
}
}
return $closest;
}
评论