改变数组中的固定字段数字转是否和乡镇

单纯的1转是,0转否并不难,写个foreach遍历一下单独处理就可以了,可是如果层级较深,数据量很大,foreach嵌套foreach的话,难免不会内存报错。

array_map(),array_walk(),array_walk_recursive(),考虑的又这三个函数,
其中array_map()得不到key值,array_walk()只能得到第一层的一层的数据,多层的话使用array_walk_recursive(data, function(value, key){})可以自动判断value是数组的话会自动递归遍历,这就解决了层级很深的数组值转换的问题,代码如下:

    /**
     * 转换年报告企业信息列表的数据0-否 1-是
     * 对registion_region做转换:如1->溧阳镇
     */
    public function getNumToString($data){
        $replace_fields = model('DataFields')->where('field_type','=','tinyint')->column('field_name');
        $country = model('country')->column('country','id');
        array_walk_recursive($data, function(&$v ,$k) use($replace_fields, $country){
            //对tinyint数据0/1转换成否/是
            if(in_array($k, $replace_fields)){
                if($v == 1){
                    $v = '是';
                }else{
                    $v = '否';
                }
                
            }
            //对registion_region做转换:如1->溧阳镇
            if($k == 'registration_region'){
                $v = $country[$v];
            }
            //对credit_code做特殊处理,避免科学计数法
            if($k == 'credit_code'){
                $v = $v.' ';
            }
        });
        return $data;
    }

上面的credit_code字段的处理方式避免EXCEL导出的时候超过15长度的数字变成科学计数法的方式
同时,还有个瓜皮要求,乡镇名导入的时候将输入的中文模糊匹配,转换成对应的id,代码如下:

    /**
     * 转换年报告企业信息列表的数据:否->0 是->1
     * 将镇区模糊匹配,专换成对应的数字
     */
    public function getStringToNum($data){
        $replace_fields = model('DataFields')->where('field_type','=','tinyint')->column('field_name');
        $country = model('country')->column('id','country');
        array_walk_recursive($data, function(&$v ,$k) use($replace_fields, $country){
            if(in_array($k, $replace_fields)){
                if($v == '是'){
                    $v = 1;
                }else{
                    $v = 0;
                }
                
            }
            //对registion_region做转换:如 溧阳镇->1
            if($k == 'registration_region'){
                foreach ($country as $key => $value) {
                    if(strstr($v, $key)){
                        $v = $value;
                        goto a;
                    }
                    
                }
                $v = '';
            }
            a:
        });
        return $data;
    }

你可能感兴趣的:(改变数组中的固定字段数字转是否和乡镇)