2017-04-26 61 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

或@更簡單的版本@不要恐慌:只是篩選出大於您的搜索值的值:) –