我想在数组中搜索值,但确切搜索的值不存在。 示例:
$array = array (
"A" => 0,
"B" => 50,
"C" => 90,
"D" => 300,
"E" => 500
);
$searched_value = 80;
我想在这种情况下获得B. 我将使用的功能如下:
array_search($searched_value,$array,"<=")
我该怎么办?
答案 0 :(得分:2)
过滤数组以仅包含符合条件的项目。
$target = 80;
$filtered = array_filter($array, function($x) use ($target) {
return $x <= $target;
});
然后对它进行排序,除非它已经排序。
sort($filtered);
最大值&lt; =您的搜索目标将是最后一个元素。
$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);
对于较小的阵列或尚未排序的阵列,这不会产生太大影响。
答案 1 :(得分:0)
您可以使用array_map
从所有数组元素中减去您的值,然后使用0
过滤大于array_filter
(零)的值,然后选择最后一个条目。这应该是你的价值。
这样的事情:
$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
答案 2 :(得分:-2)
使用if: -
如果(array_search($ searched_value,$阵列)==&#34;&#34) echo&#34; not found&#34 ;; 其他 echo array_search($ searching_value,$ array);