如何进行TEC-006的数据模糊处理
admin
2023-06-13 22:02:08
0次

数据在用户层要做模糊化处理,数据范围连续,没有重合,想了一个解决方案,通过对范围的起始位置排序用二分查找获取模糊值区间;

数据转换格式如下:
eg.1
50平以下(<50)
50-70平(>=50,<70)
70-90平(>=70,<90)
90-110平(>=90,<110)
110-130平(>=110,<130)
130-150平(>=130,<150)
150-200平(>=150,<200)
200平以上(>=200)
eg.2
一个月以内(0-30天)
两个月以内(31-60天)
三个月以内(61-90天)
半年以内(91-180天)
一年以内(181天-365天)
一年以上(365天以上)
demo:
class VlCode {
const CONSTRUCTION_AREA=[50,70,90,110,130,150,200];
const FINAL_PRICE=[100,150,200,250,300,400,500,800,1000];
const LOAN_AMOUNT=[30,50,100,150,200,250,300,400,500];
const LOAN_DATE=[30,31,60,61,90,91,180,181,365];
const LOAN_DATE_CEIL=[
'-1'=>"一个月以内",
'1'=>"两个月以内",
'3'=>"三个月以内",
'5'=>"半年以内",
'7'=>"一年以内",
'9'=>"一年以上"        
];
/**

  • 描述: 获取范围值转义

  • @date:2018年4月9日 上午10:00:44

  • @$arr 范围值,@$target 参考值

  • @author lwy
    */
    static public function getRanges($arr,$target,$ceil=''){
    if(empty($target)||$target<0){
    return '无';
    }
    $index=self::binarySearchAsc($arr,$target);
    if($ceil=='date'){
    $changeArr=self::LOAN_DATE_CEIL;
    return @$changeArr[$index];
    }
    $count=count($arr);
    $last=$ceil;
    if($index==-1){
    $last='以下';
    $ret=$arr[0];
    }elseif($index==$count){
    $last='以上';
    $ret=$arr[$index-1];
    }else{
    $ret=$arr[$index].'-'.$arr[$index+1];
    }
    if(empty($ceil)){
    return $ret;
    }else{
    return $ret.$last;
    }
    }
    /**

  • 描述: 获取时间差(天)

  • @date:2018年4月9日 上午11:01:45

  • @author lwy
    /
    static public function getDays($begin,$end=''){
    $end=empty($end)?date('Y-m-d'):$end;
    $begin=empty($begin)?date('Y-m-d'):date('Y-m-d',strtotime($begin));
    $t = strtotime($end) - strtotime($begin);//拿当前时间-开始时间 = 相差时间
    return $days = $t/(3600
    24);//此时间单位为 天
    }
    /**

  • 描述: 二分查找 升序查找区间范围的数据

  • @date:2018年4月9日 上午10:57:51

  • @author lwy
    */
    //二分查找
    static public function binarySearchAsc(Array $arr, $target) {
    $last=count($arr);
    $low = 0;
    $high = $last - 1;
    while($low <= $high) {
    $mid = floor(($low + $high) / 2);
    $next=$mid+1;
    $pre=$mid-1;
    //#找到元素
    if($arr[$mid]==$target){
    return $mid;}elseif($arr[$mid]>$target&&$pre>=0&&$target>=@$arr[$pre]){
    br/>}elseif($arr[$mid]>$target&&$pre>=0&&$target>=@$arr[$pre]){
    }elseif($target>=$arr[$high]){
    return $last;
    }elseif($pre<0){
    return $pre;
    }
    //if($arr[$mid] == $target) return $mid;
    //#中元素比目标大,查找左部
    if($arr[$mid] > $target) $high = $mid - 1;
    //#重元素比目标小,查找右部
    if($arr[$mid] < $target) $low = $mid + 1;
    }
    //#查找失败
    return false;
    }
    }

$arr = array(1, 3, 5, 7, 9, 11,13);
echo  VlCode::getRanges($arr,8,'平');
$date='2017-05-12';
$days=VlCode::getDays($date);
echo  VlCode::getRanges(VlCode::LOAN_DATE,$days,'date');

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...