我想搜索一个数组中的值,但确切的搜索值不存在。 实施例: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'方法中可能的重复不管用。 –