美文网首页
改变数组中的固定字段数字转是否和乡镇

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

作者: 东西汉 | 来源:发表于2018-08-10 12:50 被阅读0次
    单纯的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;
        }
    

    相关文章

      网友评论

          本文标题:改变数组中的固定字段数字转是否和乡镇

          本文链接:https://www.haomeiwen.com/subject/ngekbftx.html