繁体   English   中英

在具有多个结果的数组中查找匹配或最接近的值 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 的值。这应该是 output 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;
}

我如何创建可以帮助我实现目标的 function?

谢谢你。

由于您可能会返回多个数字,因此您的结果变量必须是一个数组(其中可能只有一个值)。

然后,您只需添加一个分支来检测相等性:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM