如何在PHP中生成递增的唯一ID?
例如,顺序应为:
aaaaaa < aaaaab < aaaaac 等等...
uniqid()
函数生成的ID是递增的(后生成的ID一定比先生成的大),但不是连续的(之间可能会有空隙)。
否则,可以记录上一个生成的ID,并在生成新ID时将其自增。
在PHP中,默认情况下,递增/递减运算符
可以直接与字符串一起使用,请参阅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
十进制是由0-9组成的数字。而三十六进制则在此基础上加入了26个字母。
请注意,没有必要将输出实际保存回数据库,这将需要另一个查询并且会破坏此优化的目的。相反,您可以添加一个变换器,在实时转换ID:
class Flight extends Model {
...
public function getUniqueIdAttribute()
{
return base_convert($this->id, 10, 36);
}
}
$flight->uniqueId
来获取您的基36转换ID。