我有一个这样的数组:
$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);
}
抱歉我的英语。
答案 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之间找到两个数字,然后您可以比较这两个数字。