技术文摘

设计,技术,行业

php批量生成产品编号:xxx.000001,并依次递增

一、php的str_pad()函数

(1)根据我的需求,通过自己来循环生成,并拼接也是可以的。但是既然php自带了这方面的函数,那当然还是用自带的函数更好一些。

(2)用法:

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 - 填充字符串的右侧。默认。

(3)例如:

<?php
$str = "Hello World";
echo str_pad($str,30,".",STR_PAD_LEFT);
?>

//结果:...................Hello World

 
也就是说,这个函数可以填充我们规定的长度的字符串,这就很符合我们的要求了。
二、具体实现

(1)代码部分

  public function test_iot(Request $request){
  //假设我们需要批量生成10条
    $num = 10;
    //这里是我们要拼接的固定前缀
    $device_name = 'ABCD_';
    //设置从0开始
    $m = 0;
    $strs = '';
    for($i = 0; $i<$num; $i++){
    //每次循环,m都会递增
      $m = $m+1;
      //我们通过str_pad()函数,把递增的$m组合成7位的字符串,长度不够则用0来凑齐
      $str=$device_name.str_pad($m,7,'0',STR_PAD_LEFT );
      //把字符串用'&'连接起来,并打印
      $strs .= '&'.$str;
    }
    $strs = substr($strs,1);
    print_r($strs);

  }

(2)结果部分

ABCD_0000001&ABCD_0000002&ABCD_0000003&ABCD_0000004&ABCD_0000005&ABCD_0000006&ABCD_0000007&ABCD_0000008&ABCD_0000009&ABCD_0000010

这已经达到我们的目的了,生成我们想要的字符串


三、php的sprintf()函数,自动填充

(1)定义
把百分号(%)符号替换成一个作为参数进行传递的变量:

由于参数过多,具体请参考手册:
http://www.w3school.com.cn/php/func_string_sprintf.asp

(2)具体代码

public function test_iot1(){
    $num = 10;
    $device_name = 'ABCD_';
    $m = 0;
    $strs = '';
    for($i = 0; $i<$num; $i++){
      $m = $m+1;
      //代码和上面的差不都
      $str=$device_name.sprintf('%07s', $m);
      //最主要就是这部分,填充替换
      $strs .= '&'.$str;
    }
    $strs = substr($strs,1);
    print_r($strs);
  }


解释:
      sprintf()的功能非常灵活,上面的格式字符串中,“%07s ”表示输出成长度为7的字符串,如果长度不足,左边以零补全;如果写成 “%7s ”,则默认以空格补全;如果希望使用其它字符补全,则要在该字符前加上单引号,即形如“%’#7s ”的表示以井号补全;最后,如果希望补全发生在 字符串右边,则在百分号后加上减号,“%-07s ”。

(3)具体效果

ABCD_0000001&ABCD_0000002&ABCD_0000003&ABCD_0000004&ABCD_0000005&ABCD_0000006&ABCD_0000007&ABCD_0000008&ABCD_0000009&ABCD_0000010

这两种方法都能达到我们想要的目的。当然,这边只是测试一下,只生成了10条数据,而且我是按照自己的需求给拼接起来了。大家可以按照自己的需求来操作字符串。