A-A+

PHP补全数字后几位为0

2019年09月30日 PHP技术文章 暂无评论 阅读 0 views 次

写了一个PHP的定时脚本,要实现一个数字补全的功能,首先在我们的数据库里面 MYSQL 建一个 CODE 数字码的字段,要实现的就是先读取 MYSQL 表中的 ID,然后更新到 CODE 表里面,生成 6 位数字码,也就是更新目前的 ID 补全 0 等于 6 位数字,好了,我们先找一个 PHP 的补全函数 str_pad 函数,这个函数的意思就是把字符串填充补全为新的字符长度。用法如下。

str_pad(string,length,pad_string,pad_type)

string 要填充或者补充的字符串

length 补全后的长度

pad_string 用这个字符串来填充

pad_type 填充方向 STR_PAD_BOTH - 填充字符串的两侧。如果不是偶数,则右侧获得额外的填充STR_PAD_LEFT - 填充字符串的左侧。STR_PAD_RIGHT - 填充字符串的右侧。默认。

如果我们需要向未尾填充的话,pad_type 省略掉就可以了。

实例:echo str_pad('1',5,'0',STR_PAD_LEFT); 输出 00001

是不是很简单,好了,这就是PHP补全数字后几位,下面我再把自己写的PHP定时脚本给贴出来,供自己复习使用,Thinkphp 控制器代码如下:

  1. /** 
  2.  * 处理user表生成code码 
  3.  * return string 
  4.  */  
  5. public function user_code(){  
  6.     //日志文件655  
  7.     $log_filename = 'return_user_code_log' . date('Ymd');  
  8.       
  9.     //每页条数  
  10.     $page_size = 20;  
  11.     $i = 1;  
  12.        while(1)  
  13.        {  
  14.         $offset = ($i - 1) * $page_size;  
  15.           
  16.         $model = D("User");  
  17.         //$where['code'] = array('lt',1);  
  18.         $list = $model->limit($offset$page_size)->where($where)->order('id desc')->select();  
  19.           
  20.         if(emptyempty($list)) dprint("Handle Ok");  
  21.   
  22.         pprint($model->_sql(),$offset$page_size);  
  23.   
  24.         $log = array();   
  25.         foreach($list as $k=>$v){  
  26.             pprint($v);  
  27.               
  28.             $data[] = array($v['id']);  
  29.             if($this->_confirm_command == '--run')  
  30.             {             
  31.                     $res = $model->user_code($v['id']);  
  32.                 $log[] = $res;  
  33.             }  
  34.         }  
  35.           
  36.         if($this->_confirm_command == '--dry') dprint('处理User表补全code任务', $data);  
  37.               
  38.         usleep(1000);  
  39.         $i++;             
  40.         if($i >= 10000) dprint('防止死循环中止');    
  41.     }  
  42.   
  43.     \Helper_Tool::debug($log, true, true, $log_filename$this->_log_dir);  
  44.       
  45.     dprint('Handle Ok');  
  46. }  

MODEL层的PHP代码如下:

  1. /** 
  2.  * 批量更新user表 code 值 
  3.  * @param array $id user_id 
  4.  * @return \exit 
  5.  */  
  6. public function user_code($id){  
  7.       
  8.     if(emptyempty($id)) return \Helper_Tool::throwback(-1,'用户id不能为空');  
  9.       
  10.     $user = $this->where(['id'=>$id])->find();  
  11.       
  12.     if (emptyempty($user)) return \Helper_Tool::throwback(-1,'用户不存在');  
  13.       
  14.     $code = str_pad($id,'6','0');  
  15.       
  16.     $save = [  
  17.         'code' => $code,  
  18.     ];  
  19.       
  20.     $map['id'] = array('eq',$id);  
  21.        
  22.     $res = $this->where($map)->save($save);  
  23.        
  24.     if($res === false) return \Helper_Tool::throwback(-3,"补全失败");  
  25.       
  26.     return \Helper_Tool::throwback(1,"补全成功");  
  27.   
  28. }  

目前我的项目实例中有十几万的数据,因为一次性处理数据,所以没有做定时脚本MYSQL数据判断,测试这个项目定时跑了两个多小时,一次性补完 CODE 字段的更新,性能还是比较好的,如果要学的同学可以参考一下,目前我的代码仅贴出了 C 和 D 层的代码,还有一些 Tool 工具函数,因为是自己参考用的,就暂时不贴了,不然篇幅太大,可以自行修改使用。

标签:

给我留言