如何在PHP中生成字母数字递增id?

时间:2011-01-12 11:17:12

标签: php

我在PHP中有系统,我必须插入一个必须喜欢的数字

PO_ACC_00001,PO_ACC_00002,PO_ACC_00003.PO_ACC_00004 and so on

这将被插入数据库以供进一步参考,“PO和ACC”是动态前缀,它们可以根据要求而不同

现在我主要担心的是如何增加00001系列并保留数字中的5位数系列?

4 个答案:

答案 0 :(得分:2)

您可以使用简单的正则表达式从字符串中获取数字,然后您有一个简单的整数。

增加数字后,您可以使用

之类的内容轻松对其进行格式化
$cucc=sprintf('PO_ACC_%05d', $number);

答案 1 :(得分:2)

>> $a = "PO_ACC_00001";
>> echo ++$a;
'PO_ACC_00002'

答案 2 :(得分:0)

创建辅助函数和位或错误检查。

/**
 * Takes in parameter of format PO_ACC_XXXXX (where XXXXX is a 5
 * digit integer) and increment it by one
 * @param string $po
 * @return string
 */
function increment($po)
{
    if (strlen($po) != 12 || substr($po, 0, 7) != 'PO_ACC_')
        return 'Incorrect format error: ' . $po;

    $num = substr($po, -5);

    // strip leading zero
    $num = ltrim($num,'0');

    if (!is_numeric($num))
        return 'Incorrect format error.  Last 5 digits need to be an integer: ' . $po;

    return ++$po;

}

echo increment('PO_ACC_00999');

答案 3 :(得分:0)

Sprintf在这种情况下非常有用,因此,我建议在the documentation中阅读更多内容。

<?php 
    $num_of_ids = 10000; //Number of "ids" to generate.
    $i = 0; //Loop counter.
    $n = 0; //"id" number piece.
    $l = "PO_ACC_"; //"id" letter piece.

    while ($i <= $num_of_ids) { 
        $id = $l . sprintf("%05d", $n); //Create "id". Sprintf pads the number to make it 4 digits.
        echo $id . "<br>"; //Print out the id.
        $i++; $n++; //Letters can be incremented the same as numbers. 
    }
?>