如何在PHP中生成递增的唯一ID?

3

如何在PHP中生成递增的唯一ID?

例如,顺序应为:

aaaaaa < aaaaab < aaaaac 等等...

4个回答

8

uniqid()函数生成的ID是递增的(后生成的ID一定比先生成的大),但不是连续的(之间可能会有空隙)。

否则,可以记录上一个生成的ID,并在生成新ID时将其自增。


可以将其构建到您正在编写的系统中。只需在cfg文件中创建一个策略值,该值最终将成为当前值。每次生成新的ID时,都会增加该值。 - pawel-kuznik
这个答案很适合我的解决方案,但我不得不修改我的代码。谢谢。 - siannone

6

1
+1 完美运作!我不知道你可以这样做。而且它可以超过6个字符。再简洁不过了 :) - Darragh Enright
1
PHP 有时确实很好用... 在大多数其他编程语言中,这需要大量的编码工作... - Baba

1

0

如果您使用这里的其他解决方案之一,仍然必须获取或保存最后一个ID,然后递增它。相反,您可以直接使用自动递增的ID并将其转换为文本表示形式。

我在这里使用Laravel示例,但您可以将此理论应用于任何框架。

// Save your model.
$flight = new Flight;
$flight->name = $request->name;
$flight->save();

// $flight->id now contains the last inserted id.
echo base_convert($flight->id, 10, 36);

// Output: 1E86

十进制是由0-9组成的数字。而三十六进制则在此基础上加入了26个字母。

请注意,没有必要将输出实际保存回数据库,这将需要另一个查询并且会破坏此优化的目的。相反,您可以添加一个变换器,在实时转换ID:

class Flight extends Model {
    ...
    public function getUniqueIdAttribute()
    {
        return base_convert($this->id, 10, 36);
    }
}

现在,您可以简单地保存您的模型并调用$flight->uniqueId来获取您的基36转换ID。
提示:为ID添加盐值以防止泄露实际数据库ID。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接