数字字符串怎么自增

求助,写了个递归也失败了
数字字符串怎么自增

这边是获取到上一个 id
数字字符串怎么自增

一开始是直接 + 1,然后发现开头的 0 会被省略掉变成 100009. 所以来咨询大佬们!
怎么样 + 1 改成 0100009,然后到了 10 之后怎么变成 0100010. 这种情况

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案
/**
 * @param $str 要自增的基数,例如 00001200
 */
 public function getInc($str)
 {
     $prefix_str = '';
     $strlen = strlen($str);
     for ($i=0; $i < $strlen ; $i++) {
         if($str[$i]>0){
             if($str[$i]==9 && $prefix_str) {
                  $prefix_str = substr($prefix_str,1);
             }
             $suffix_str = (int)substr($str,$i)+1;
             break;
         } else {
             $prefix_str .= '0';
         };
     }
     return isset($suffix_str) ? $prefix_str.$suffix_str : substr($str,1,$strlen-1).'1';
 }

你试一下

3年前 评论
讨论数量: 5
/**
 * @param $str 要自增的基数,例如 00001200
 */
 public function getInc($str)
 {
     $prefix_str = '';
     $strlen = strlen($str);
     for ($i=0; $i < $strlen ; $i++) {
         if($str[$i]>0){
             if($str[$i]==9 && $prefix_str) {
                  $prefix_str = substr($prefix_str,1);
             }
             $suffix_str = (int)substr($str,$i)+1;
             break;
         } else {
             $prefix_str .= '0';
         };
     }
     return isset($suffix_str) ? $prefix_str.$suffix_str : substr($str,1,$strlen-1).'1';
 }

你试一下

3年前 评论
$str = '010008';

for ($i = 1; $i <= 20; $i++) {
    echo str_pad(intval($str) + $i, 6, "0", STR_PAD_LEFT) . '-';
}
3年前 评论

直接数据库零填充不行嘛?

3年前 评论
ononl 3年前
function increNumericString($numeric_string, int $incre_num=1) {
    if (!is_numberic($numeric_string)) {throw new \Exception('传入参数须是数字或数字字符串');}
    if ($incre_num <=0 ) {throw new \Exception('incre_num须大于0');}

    $number = (int)$numeric_string;
    $new_number = $number + $incre_num;

    $string_len = strlen($numeric_string);//原有字符串长度
    $new_number_len = strlen($new_number);//新字符串长度
    //进位不保持前置0个数
    $length = $new_number_len > $string_len ? $new_number_len : $string_len;
    //永远保持前置0个数
    // $length = $string_len + $new_number_len - strlen($number);

    return str_pad((string)$new_number, $length , '0', STR_PAD_LEFT);
}

$str = '0108';
var_dump(increNumericString($str));//string(4) "0109"
$str = '0099';
var_dump(increNumericString($str));
//进位不保持前置0 //string(4) "0100"
//永远保持前置0 //string(5) "00100"
3年前 评论