由于我不会进入的原因,我需要创建4个字符的唯一ID,所有ID都以A开头。例如;
AAAA AAAB AAAC
等等。我查看了uniqid()函数,但似乎只会创建一个数值。此代码不需要是随机的,它可以按顺序进行,因此我可以使用以下内容进行迭代。
$letters = range('A', 'Z');
foreach ($letters as $one) {
foreach ($letters as $two) {
foreach ($letters as $three) {
foreach ($letters as $four) {
echo "$one$two$three$four";
}
}
}
}
现在如何将此循环的状态存储在数据库中,因为并非所有记录都会同时创建?
答案 0 :(得分:3)
您的代码基本上是一个基数为26的数字,只使用字母作为数字。因此,您可以在数据库中存储递增数字,然后将其转换为相应的代码。
转换为26后,您移动所有数字:0
变为A
,1
变为B
,A
变为K
等等。
function num_to_code($num) {
$base26 = str_split(str_pad(strtoupper(base_convert($num, 10, 26)), 4, "0", STR_PAD_LEFT));
$result = "";
foreach ($base26 as $char) {
$result .= is_numeric($char) ? chr(ord('A') + $char) : chr(ord($char) + 10);
}
return $result;
}
答案 1 :(得分:0)
这不是最好的主意,但如果你在数据库中有一个自动增加的id,你可以随时:
$autoinc = 36; // lets say its the 36th record
$alpha_id = "AAAA";
for($i=0; $i < $autoinc; $i++) {
$alpha_id++;
}
var_dump($alpha_id); // AABK
如果他们必须从A开始,并且只有4个字符长,那么在你用完之前你只能获得大约17.5k的记录。
答案 2 :(得分:0)
@ Barmar的回答非常好,但我注意到数学完全缺乏。所以我挖出了一些我为这种情况写的旧代码:
string(4) "ABVM"
int(31609)
输出:
for(;;) {
if(!vcap.read(image)) {
std::cout << "No frame" << std::endl;
cv::waitKey();
}
cv::imshow("Output Window", image);
if(cv::waitKey(1) >= 0) break;
}