【问题标题】:How to find a number which is less than and closest to number X in an array?如何在数组中找到小于和最接近数字 X 的数字?
【发布时间】:2016-01-26 11:33:12
【问题描述】:

例如我有数组:

Array(
  [0] => 15
  [1] => 6
  [2] => 19
  [3] => 21
  [4] => 18
)

如果当前时间是 20,那么我需要值 19(小于和接近 20)

同样,如果我将 X 数作为 17 传递,它将从数组中返回 15。

如果是 7,那么它应该返回 6。

请建议如何使用 PHP 来实现?

谢谢!

【问题讨论】:

标签: php arrays sorting search


【解决方案1】:

您可以使用 array_filterend 函数创建自定义函数,如 as

function find_closest($arr,$x){
    sort($arr);
    $filtered_array = array_filter($arr,function($v)use($x){ 
        return $v < $x;
    });
    return count($filtered_array) > 0 ? end($filtered_array) : "Your Message";
}

echo find_closest($arr,17);

Demo

【讨论】:

  • 谢谢 :) 它按预期工作,如果数组中没有较小的值,您能否提出解决方案。为了说明我传递了 6,但数组中没有小于 6 的数字,所以我想传递一些默认值,我们该怎么做?
  • 好的,我可以通过检查结果来做到这一点,如果有东西那么它就可以了,否则如果它是空的,我将通过自己的值传递。非常感谢您的解决方案:)
  • 哇@Uchiha 太棒了!非常努力地检查性能并让事情变得清晰。我非常感谢你们为此付出的努力和帮助。
  • 只需选择您最满意的答案即可。这真的取决于你。也许你应该拿宇智波一个,因为他是第一个给出正确答案的人
【解决方案2】:

我会按照以下方式进行。我认为这比公认的答案更干净(而且可能更快):

function closest($arr, $x) {
    $result = "default";
    sort($arr);

    foreach($arr as $value) {
        if($value < $x) {
            $result = $value;
        } else
            break;
    }
    return $result;
}

【讨论】:

  • 非常感谢,它也可以根据我的要求工作,但我不确定哪个更好,当然它看起来更干净,但正如你所说,它更快。所以我应该去这个吗!
【解决方案3】:

将您要查找的元素推送到您的数组中。

array_push($your_array, "17");
$arr = asort($your_array);
$key = array_search('17', $arr); 

值将在 $arr[$key-1] 中。 希望这对您有所帮助。

【讨论】:

  • 感谢您的帮助,但它没有按照我的要求工作,@Uchiha 的回答正在工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2016-08-05
  • 2013-09-12
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
相关资源
最近更新 更多