如何在 PHP 中生成渐进式顺序唯一 ID?
例如,顺序应该是这样的:
aaaaaa < aaaaab < aaaaac 等等...
uniqid()
正在增加(后面生成的 ID 总是大于前面生成的 ID),但不会是连续的(会有间隙)。
否则,找到一种方法来保存最后生成的 ID,并在生成新 ID 时将其递增。
这是默认情况下在 PHPIncrementing/Decrementing Operators
中可以直接使用字符串请参阅http://php.net/manual/en/language.operators.increment.php
$start = "aaaaaa" ;
$start++;
$start++;
var_dump($start);
输出
string 'aaaaac' (length=6)
$id = 'aaaax';
for ($i=0; $i<100; $i++) {
$id++;
echo "$id\n";
}
如果您在此处使用任何其他解决方案,您仍然必须获取或保存最后一个 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
以 10 为底的是 0-9 的数字。Base 36 将字母表中的 26 个字母添加到其中。
请注意,实际上不需要将输出保存回数据库,这将需要另一个查询并破坏此优化的目的。相反,您可以添加一个实时转换 id 的 mutator:
class Flight extends Model {
...
public function getUniqueIdAttribute()
{
return base_convert($this->id, 10, 36);
}
}
现在您可以简单地保存您的模型并调用$flight->uniqueId
并获取您的 base 36 转换后的 id。
提示:向 id 添加盐值以防止泄漏实际的数据库 id。