在具有多个结果的数组中查找匹配或最接近的值 php

Find a matching or closest value in an array with multiple results php

提问人:ShibeSon 提问时间:1/7/2023 更新时间:1/7/2023 访问量:34

问:

我正在尝试找出一种方法来在具有多个结果的 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;
}

我怎样才能创建一个可以帮助我实现目标的功能?

谢谢。

PHP 比较

评论


答:

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;
}