如何在PHP中生成渐进式顺序唯一ID?
例如,订单应为:
aaaaaa< aaaaab< aaaaac等......
答案 0 :(得分:8)
uniqid()
正在增加(稍后生成的ID将始终大于之前生成的ID),但不会是顺序的(会有间隙)。
否则,找到一种方法来保存最后生成的ID,并在生成新ID时将其递增。
答案 1 :(得分:5)
默认情况下,PHP Incrementing/Decrementing Operators
可以直接使用字符串,请参阅http://php.net/manual/en/language.operators.increment.php
$start = "aaaaaa" ;
$start++;
$start++;
var_dump($start);
输出
string 'aaaaac' (length=6)
答案 2 :(得分:1)
$id = 'aaaax';
for ($i=0; $i<100; $i++) {
$id++;
echo "$id\n";
}
答案 3 :(得分: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
基数10是0-9的数字。 Base 36将26个字母添加到其中。
请注意,不需要将输出实际保存回数据库,这将需要另一个查询并且无法实现此优化的目的。相反,您可以添加一个实时转换id的mutator:
class Flight extends Model {
...
public function getUniqueIdAttribute()
{
return base_convert($this->id, 10, 36);
}
}
现在,您只需保存模型并致电$flight->uniqueId
并获得基本36转换后的身份。
提示:在id中添加salt值以防止泄漏实际的数据库ID。