PHP使用规范生成唯一的代码
我试图编写一个PHP函数来生成一个3个字母的代码。第一个字母必须是X、Y或Z,并且必须遵循以下格式:XAA、XAB、XAC。。。。直到XAW,然后是XBA,XBB,XBC。。。。直到XBW,然后是XCA,XCB。。。。。等等 当“X”完成后,然后是,是,等等。。。 当“Y”完成时,ZAA,ZAB,等等 此代码的第2个和第3个字母不能是X、Y或Z 我正在从数据库中获取最后生成的代码 这是我到目前为止得到的。。对最终条件感到困惑:PHP使用规范生成唯一的代码,php,random,Php,Random,我试图编写一个PHP函数来生成一个3个字母的代码。第一个字母必须是X、Y或Z,并且必须遵循以下格式:XAA、XAB、XAC。。。。直到XAW,然后是XBA,XBB,XBC。。。。直到XBW,然后是XCA,XCB。。。。。等等 当“X”完成后,然后是,是,等等。。。 当“Y”完成时,ZAA,ZAB,等等 此代码的第2个和第3个字母不能是X、Y或Z 我正在从数据库中获取最后生成的代码 这是我到目前为止得到的。。对最终条件感到困惑: $valid = str_split("ABCDEFGHIJKLMN
$valid = str_split("ABCDEFGHIJKLMNOPQRSTUVW");
if($result->num_rows() < 1)
$last_code = 'XAA';
else {
$result = $result->row_array();
$last_code = $result['employee_code'];
}
$arr = str_split($last_code);
$first = $arr[0];
$second = $arr[1];
$third = $arr[2];
if($first == 'X') {
} else if($second == 'Y') {
} else if($third == 'Z') {
}
$valid=str_split(“abcdefghijklmnopqrstuv”);
如果($result->num_rows()<1)
$last_code='XAA';
否则{
$result=$result->row_array();
$last_code=$result['employee_code'];
}
$arr=str\U分割($last\U代码);
$first=$arr[0];
$second=$arr[1];
$third=$arr[2];
如果($first=='X'){
}else if($second=='Y'){
}else if($third=='Z'){
}
逻辑非常简单,因为PHP具有以下机制:
$letter = 'a';
echo ++$letter; // echoes 'b'
这是好的
现在,您只需确保自己是代码的边界:
'W'
,它将被替换为'A'
,而前一个字母将递增'Z'
,且应递增,则算法无法生成新代码if($result->num_rows() < 1) {
//If no code exists the new code is XAA, not the old one.
return 'XAA';
}
$result = $result->row_array();
$last_code = $result['employee_code'];
$new_code = $old_code;
if ($old_code[2] === 'W') {
if ($old_code[1] === 'W') {
if ($old_code[0] === 'Z') {
throw new Exception('All codes used! Add new algorithm');
}
$new_code[0] = ++$old_code[0];
$new_code[1] = 'A';
} else {
$new_code[1] = ++$old_code[1];
}
$new_code[2] = 'A';
} else {
$new_code[2] = ++$old_code[2];
}
return $new_code;
if($result->num_rows()<1){
//如果不存在代码,则新代码是XAA,而不是旧代码。
返回“XAA”;
}
$result=$result->row_array();
$last_code=$result['employee_code'];
$new_code=$old_code;
如果($old_code[2]='W'){
如果($old_code[1]='W'){
如果($old_code[0]='Z'){
抛出新异常(‘使用了所有代码!添加新算法’);
}
$new_code[0]=++$old_code[0];
$new_code[1]=“A”;
}否则{
$new_code[1]=++$old_code[1];
}
$new_code[2]=“A”;
}否则{
$new_code[2]=++$old_code[2];
}
返回$new_代码;
前两个
if
条件处理边界1,而第三个if
条件处理边界2。else
块处理字母的增量。我编写了一个更简单的逻辑:
public function generate_code() {
$result = $this->db->query("SELECT employee_code FROM employees ORDER BY id DESC LIMIT 1");
$invalid = str_split("XYZ");
if($result->num_rows() < 1)
$last_code = 'XAA';
else {
$result = $result->row_array();
$last_code = $result['employee_code'];
}
$last_code++;
while(in_array($last_code[1], $invalid)) {
$last_code++;
}
while(in_array($last_code[2], $invalid)) {
$last_code++;
}
return $last_code;
}
公共函数生成_代码(){
$result=$this->db->query(“根据id DESC LIMIT 1从员工订单中选择员工_代码”);
$invalid=str_分割(“XYZ”);
如果($result->num_rows()<1)
$last_code='XAA';
否则{
$result=$result->row_array();
$last_code=$result['employee_code'];
}
$last_code++;
while(在数组中($last_code[1],$invalid)){
$last_code++;
}
while(在数组中($last_code[2],$invalid)){
$last_code++;
}
返回$last_代码;
}
谢谢,我在下面发布了一个简单的逻辑代码。这就是你问题的解决方案吗?@Adam是的,它解决了问题。这不是很有效,但很有效。