php查讯指定数值在数组内最接近的数 例如 数组里有 1,5,8,12,15,19,21
答案:2 悬赏:0 手机版
解决时间 2021-01-29 11:22
- 提问者网友:不爱我么
- 2021-01-28 22:46
php查讯指定数值在数组内最接近的数 例如 数组里有 1,5,8,12,15,19,21
最佳答案
- 五星知识达人网友:北方的南先生
- 2021-01-29 00:24
你摆脱不了循环的,肯定要循环一次,不然,你怎么知道最后一个不是比你找到的更接近呢。当然,这个循环不一定要你自己代码写而已,实际也是要循环。
而且,你这个例子有矛盾的地方,12难道比8更接近10?
一般这种东西,我不会去纠结效率,等你需要对这个纠结效率的时候,你就是大神。追问能把代码贴出来参考下吗得到的结果最好是比这个数值大的追答$arr = [1,5,8,12,15,19,21];
rsort($arr);
foreach($arr as $k => $v){
$m = $v;
if($v <= 12){
if($k === 0){
break;
}
$m = ($arr[$k-1] - 12) <= (12 - $m) ? $arr[$k-1] : $m;
break;
}
}
我随便贴一个,效率不算高,这种方式跟数字分布有关。也不想去分布分析,直接排个序而已追问$a=[1,6,8,12,13,14,66,139]; function findClosest(&$a,$f){ $the=FALSE; start: $cur= current($a); if($the===FALSE|| abs($cur-$f)< abs($the-$f)||(abs($cur-$f)== abs($the-$f)&&$cur>$the)){ $the= $cur; } if(next($a)===FALSE){ return $the; }else{ goto start; } } echo findClosest($a, 10); 能帮我看看哪错了吗start 报错 这能用别的替换吗追答你这是用什么语言啊。。。。php没有star goto结构的追问这也是别人给我发的 没弄明白所以和你请教一下我先采纳你吧追答我也看不懂,start goto结构,一般现在都没有或者不推荐这种写法了追问说5.3里支持 但我怎么弄都报错那有没有别的办法追答你可以拿我给你贴的程序去试试,效率还算不错了,就是跟数据的分布有关,结果越靠前,效率越高。就算靠后,也不见得效率差,基本上微秒级别的,可以忽略追问好的 非常感谢 麻烦你了
而且,你这个例子有矛盾的地方,12难道比8更接近10?
一般这种东西,我不会去纠结效率,等你需要对这个纠结效率的时候,你就是大神。追问能把代码贴出来参考下吗得到的结果最好是比这个数值大的追答$arr = [1,5,8,12,15,19,21];
rsort($arr);
foreach($arr as $k => $v){
$m = $v;
if($v <= 12){
if($k === 0){
break;
}
$m = ($arr[$k-1] - 12) <= (12 - $m) ? $arr[$k-1] : $m;
break;
}
}
我随便贴一个,效率不算高,这种方式跟数字分布有关。也不想去分布分析,直接排个序而已追问$a=[1,6,8,12,13,14,66,139]; function findClosest(&$a,$f){ $the=FALSE; start: $cur= current($a); if($the===FALSE|| abs($cur-$f)< abs($the-$f)||(abs($cur-$f)== abs($the-$f)&&$cur>$the)){ $the= $cur; } if(next($a)===FALSE){ return $the; }else{ goto start; } } echo findClosest($a, 10); 能帮我看看哪错了吗start 报错 这能用别的替换吗追答你这是用什么语言啊。。。。php没有star goto结构的追问这也是别人给我发的 没弄明白所以和你请教一下我先采纳你吧追答我也看不懂,start goto结构,一般现在都没有或者不推荐这种写法了追问说5.3里支持 但我怎么弄都报错那有没有别的办法追答你可以拿我给你贴的程序去试试,效率还算不错了,就是跟数据的分布有关,结果越靠前,效率越高。就算靠后,也不见得效率差,基本上微秒级别的,可以忽略追问好的 非常感谢 麻烦你了
全部回答
- 1楼网友:迟山
- 2021-01-29 01:31
一般效率比较高的就是二分法了~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯