2017-04-26 62 views
0

我想搜索一个数组中的值,但确切的搜索值不存在。 实施例:php数组搜索与比较

$array = array (
    "A" => 0, 
    "B" => 50, 
    "C" => 90, 
    "D" => 300, 
    "E" => 500 
); 

$searched_value = 80; 

我想获得乙在这种情况下。 我使用的功能如下:

array_search($searched_value,$array,"<=") 

我应该如何进行?

+3

为什么B和为什么不是C?什么是标准 – mehulmpt

+2

检查此线程http://stackoverflow.com/questions/5464919/php-nearest-value-from-an-array –

+0

这不是寻找_closest_匹配,所以'abs'方法中可能的重复不管用。 –

回答

2

将数组过滤为仅包含符合条件的项目。

$target = 80; 

$filtered = array_filter($array, function($x) use ($target) { 
    return $x <= $target; 
}); 

然后对它进行排序,除非它已经排序。

sort($filtered); 

最大值< =您的搜索目标将是最后一个元素。

$value = end($filtered); 
$key = key($filtered); 

要使用这种方法来代替>=,只需使用该操盘<=array_filter回调,并使用reset代替end拿到第一值,而不是最后一个。


这会不会是非常适合正在申请array_filter前已经排好序的大阵列,因为array_filter会遍历它开始发现不符合标准值,即使在每一个元素。在这种情况下,最好只使用foreach,这样一旦找到目标,就可以跳出循环。

$key = null; 
$value = 0; 

foreach ($array as $k => $v) { 
    if ($v > $target) { 
     break; 
    } 
    $key = $k; 
    $value = $v; 
} 

var_dump($key, $value); 

对于较小的数组或尚未排序阵列,这不会有太大的差别。

-2

使用,如果: -

如果(array_search($ searched_value,$阵列)== “”) 回声 “未找到”; else echo array_search($ searching_value,$ array);

0

您可以使用array_map从所有数组元素中减去您的值,然后使用array_filter过滤大于0(零)的值,然后取最后一个条目。这应该是你的价值。

事情是这样的:

$array = array (...); 
$searched_value = 80; 

function subtract($val) { 
    return $val - $searched_value; 
} 

function ltzero($val) { 
    return $val <= 0; 
} 

$new_arr = array_filter(array_map('subtract', $array), 'ltzero'); 

// get last item or $new_arr 
+0

或@更简单的版本@不要恐慌:只是筛选出大于您的搜索值的值:) –