A-A+
PHP补全数字后几位为0
写了一个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 控制器代码如下:
- /**
- * 处理user表生成code码
- * return string
- */
- public function user_code(){
- //日志文件655
- $log_filename = 'return_user_code_log' . date('Ymd');
- //每页条数
- $page_size = 20;
- $i = 1;
- while(1)
- {
- $offset = ($i - 1) * $page_size;
- $model = D("User");
- //$where['code'] = array('lt',1);
- $list = $model->limit($offset, $page_size)->where($where)->order('id desc')->select();
- if(emptyempty($list)) dprint("Handle Ok");
- pprint($model->_sql(),$offset, $page_size);
- $log = array();
- foreach($list as $k=>$v){
- pprint($v);
- $data[] = array($v['id']);
- if($this->_confirm_command == '--run')
- {
- $res = $model->user_code($v['id']);
- $log[] = $res;
- }
- }
- if($this->_confirm_command == '--dry') dprint('处理User表补全code任务', $data);
- usleep(1000);
- $i++;
- if($i >= 10000) dprint('防止死循环中止');
- }
- \Helper_Tool::debug($log, true, true, $log_filename, $this->_log_dir);
- dprint('Handle Ok');
- }
MODEL层的PHP代码如下:
- /**
- * 批量更新user表 code 值
- * @param array $id user_id
- * @return \exit
- */
- public function user_code($id){
- if(emptyempty($id)) return \Helper_Tool::throwback(-1,'用户id不能为空');
- $user = $this->where(['id'=>$id])->find();
- if (emptyempty($user)) return \Helper_Tool::throwback(-1,'用户不存在');
- $code = str_pad($id,'6','0');
- $save = [
- 'code' => $code,
- ];
- $map['id'] = array('eq',$id);
- $res = $this->where($map)->save($save);
- if($res === false) return \Helper_Tool::throwback(-3,"补全失败");
- return \Helper_Tool::throwback(1,"补全成功");
- }
目前我的项目实例中有十几万的数据,因为一次性处理数据,所以没有做定时脚本MYSQL数据判断,测试这个项目定时跑了两个多小时,一次性补完 CODE 字段的更新,性能还是比较好的,如果要学的同学可以参考一下,目前我的代码仅贴出了 C 和 D 层的代码,还有一些 Tool 工具函数,因为是自己参考用的,就暂时不贴了,不然篇幅太大,可以自行修改使用。