ThinkPHP 3.2 的 string() 生成唯一随机字符串

本文介绍了一种使用ThinkPHP框架中的String类生成唯一优惠券代码的方法。通过查询现有优惠码并确保新生成的代码不重复,实现了按需生成指定数量的唯一优惠券。详细步骤包括检查数据库中的现有优惠码、生成随机字符串并验证其唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在thinkphp中有个string类系统需要优惠券的生成程序,保证每次生成的优惠券都是唯一的,一次生成的数量不是固定的。
分享我的做法:
1、查出表里已有的优惠码。
2、在外部定义一个值,记录内部实际有效运行的次数。
3、当内部循环的数量等于实际需求生成的数量时,跳出循环。

4、避免循环的插入数据,手动的拼接SQL语句,然后执行。

$coupon = M('coupon')->getCouponList('codes');
// 此函数php版本 (PHP 5 >= 5.5.0) ,取出结果集中的 ‘code’ 字段
$coupon_list = array_column($coupon, 'codes');  
// 实例化 ThinkPHP 系统类 String
$string      = new \Org\Util\String();    
$i   = 1;
$num = 100;    // 指定生成个数 $num,在做封装的时候,可以将这个值作为参数传入
$str = '';    
$list = array();
while ($i <= $num) {
    $str = $string->randString(12);    // 调用系统方法生成字符串
    // 判断随机码和已经存在的是否冲突,如果冲突,则再重新生成一次,因为没有执行$i++,所以会生成$num个为止
    if (in_array($str, $coupon_list) === false) {    
        $list[] = $str;
        $coupon_list[] = $str;   // 将生成的随机码写入 $coupon_list 用于下次判断是否冲突
        $i++;
    }
};
$sql = '';
foreach ($list as $k => $v) {
    $sql .= "INSERT INTO coupon (codes,addtime) VALUES('" . $v . "'," . time() . ");";    // 字段设置根据数据表来定
}
// 将上面 foreach 生成的组合sql语句批量插入数据库
$info = M()->execute($sql);    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值