你摆脱不了循环的,肯定要循环一次,不然,你怎么知道最后一个不是比你找到的更接近呢。当然,这个循环不一定要你自己代码写而已,实际也是要循环。
成都创新互联公司专业为企业提供富川网站建设、富川做网站、富川网站设计、富川网站制作等企业网站建设、网页设计与制作、富川企业网站模板建站服务,十年富川做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
而且,你这个例子有矛盾的地方,12难道比8更接近10?
一般这种东西,我不会去纠结效率,等你需要对这个纠结效率的时候,你就是大神。
计算数组中每一个val 与 $b 的差值绝对值,然后根据差值的绝对值排序一下,取最小的一条就是了。
重新排序呗
sort($arry) {
$id = array_search(6, $arry);// 获取键值
echo $arry[($id+1)]; //获取最相近的值
}
可以设置的,根据循环判断。
希望我的回答可以帮到你,有什么不懂可以追问。
1.首先,题主应该选一个相似度的计算维度,比如content字段,type字段等;
2.其次,题主考虑一下各个字段的权重,比如type字段必须相同,则让type字段使用typeWeight(例如赋值0.8)作为乘积的因子,而content字段本身是比较长的,所以需要计算出一个hash值,比如使用特定算法计算出一个hash值,然后把这个hash值按照16进制计算得到10进制数,再给一个权重contentWeight(例如0.2),另外再选取一个字段,比如description描述字段,再给一个权重descriptionWeight...
3.最后得到一个当前插入到表中的记录综合hash,typeWeight(contentHashcontentWeight+descriptionHash*descriptionWeight
+...),可能会涉及到大整数计算,不过PHP有BCMATH扩展可以使用,最终得到一个数值的综合hash值,保存到数据库的一个字段中,这个东西就可以理解为本条记录的特征值。