php查找数组范围的数组

时间:2012-12-26 11:22:47

标签: php

我有一个这样的数组:

$d=array('good'=>10,'very good'=>20,'bad'=>1);

我希望在13个数字最近的数组值时找到它的密钥。

例如,$d数组中的16接近20。

喜欢结果:

key:very good
value:20

代码

$d=array('good'=>10,'very good'=>20,'bad'=>1);

$find=13;
foreach(array_chunk($find, 5) as $val) {
    echo reset($val) . "-" . end($val);
}
抱歉我的英语。

4 个答案:

答案 0 :(得分:2)

你可以尝试

$d = array('good' => 10,'very good' => 20,'bad' => 1);

vprintf("Find:%d, Closest: %d, Grade: %s\n",findClosest($d,13));
vprintf("Find:%d, Closest: %d, Grade: %s\n",findClosest($d,16));

输出

Find:13, Closest: 10, Grade: good
Find:16, Closest: 20, Grade: very good

使用的功能

function findClosest($array, $find) {
    $map = array_map(function ($v) use($find) {
        return abs($v - $find);
    }, $array);
    asort($map);
    return array($find,$array[key($map)],key($map));
}

答案 1 :(得分:1)

这不是很漂亮的代码,但我认为它符合您的要求。

$d=array('good'=>10,'very good'=>20,'bad'=>1);

$closest = array('int' => -1, 'key' => null);
$find = 16;
foreach($d as $k=>$v) {
    if ($closest['int'] == -1) { $closest['int'] = abs($find-$v); $closest['key'] = $k; continue; }
    if (abs($find - $v) < $closest['int']) {
        $closest['int'] = abs($find-$v);
        $closest['key'] = $k;
    }
}

echo "key:".$closest['key']."
value:".$d[$closest['key']];

答案 2 :(得分:0)

尝试代码

$d = array('good'=>10,'very good'=>20,'bad'=>1);
$find=13;

$result = get_closest($d , $find);
echo $result;

function get_closest($array  = array(), $key){
     $new_arr = array();
     foreach($array AS $index=>$arr){
         if($key < $arr)  {
            $new_arr[$index] = $arr - $key;
         }
         else{
             $new_arr[$index] = $key - $arr;
         }
     }

     $min_val = min($new_arr);
     $res = array_search( $min_val , $new_arr);
     return $res;
   }

感谢

答案 3 :(得分:-1)

您可以使用array_values函数将所有值都设为$ a,然后您可以对$ a进行排序。排序后,您可以在$ find之间找到两个数字,然后您可以比较这两个数字。