php数组搜索与比较

时间:2017-04-26 15:54:52

标签: php arrays search

我想在数组中搜索值,但确切搜索的值不存在。 示例:

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

$searched_value = 80;

我想在这种情况下获得B. 我将使用的功能如下:

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

我该怎么办?

3 个答案:

答案 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);