我想搜索一個數組中的值,但確切的搜索值不存在。 實施例:php數組搜索與比較
$array = array (
"A" => 0,
"B" => 50,
"C" => 90,
"D" => 300,
"E" => 500
);
$searched_value = 80;
我想獲得乙在這種情況下。 我使用的功能如下:
array_search($searched_value,$array,"<=")
我應該如何進行?
我想搜索一個數組中的值,但確切的搜索值不存在。 實施例:php數組搜索與比較
$array = array (
"A" => 0,
"B" => 50,
"C" => 90,
"D" => 300,
"E" => 500
);
$searched_value = 80;
我想獲得乙在這種情況下。 我使用的功能如下:
array_search($searched_value,$array,"<=")
我應該如何進行?
將數組過濾爲僅包含符合條件的項目。
$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);
對於較小的數組或尚未排序陣列,這不會有太大的差別。
使用,如果: -
如果(array_search($ searched_value,$陣列)== 「」) 回聲 「未找到」; else echo array_search($ searching_value,$ array);
您可以使用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
或@更簡單的版本@不要恐慌:只是篩選出大於您的搜索值的值:) –
爲什麼B和爲什麼不是C?什麼是標準 – mehulmpt
檢查此線程http://stackoverflow.com/questions/5464919/php-nearest-value-from-an-array –
這不是尋找_closest_匹配,所以'abs'方法中可能的重複不管用。 –