Php 随机优惠券代码,确保它们';我们都是独一无二的

Php 随机优惠券代码,确保它们';我们都是独一无二的,php,arrays,string,methods,Php,Arrays,String,Methods,我的代码: echo "<table width='200px' cellpadding='5' cellspacing='0'><tbody>"; $total = 500; for ($j = 0; $j < $total;$j++) { echo "<tr>"; echo "<td>" . ($j+1) . "</td>"; echo "<td>" . get_coupon_code()

我的代码:

echo "<table width='200px' cellpadding='5' cellspacing='0'><tbody>";

$total = 500;
for ($j = 0; $j < $total;$j++) {
    echo "<tr>";
    echo "<td>" . ($j+1) . "</td>";
    echo "<td>" . get_coupon_code() . "</td>";
    echo "</tr>";
}

function get_coupon_code() {
    $characters = 'ABCDEFGHJKLMNPQRSTUZWXYZ';
    $random_string_length = 8;
    $string = '';
    for ($i = 0; $i < $random_string_length; $i++) {
        $string .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $string;
}

echo "</tbody></table>";
echo”“;
$total=500;
对于($j=0;$j<$total;$j++){
回声“;
回显“($j+1)”;
echo“”。获取优惠券代码();
回声“;
}
函数get_优惠券_代码(){
$characters='ABCDEFGHJKLMNPQRSTUZWXYZ';
$random_string_length=8;
$string='';
对于($i=0;$i<$random\u string\u length;$i++){
$string.=$characters[rand(0,strlen($characters)-1)];
}
返回$string;
}
回声“;

如何确保生成的每个代码都是唯一的?

使用静态数组变量存储优惠券代码,并在返回代码之前确保该代码在数组中不可用。或者更简单地说,将代码存储在会话中处理的数组中

function get_coupon_code() {
$arr = $_SESSION['codes'];
    $characters = 'ABCDEFGHJKLMNPQRSTUZWXYZ';
    $random_string_length = 8;
    $string = '';
    for ($i = 0; $i < $random_string_length; $i++) {
        $string .= $characters[rand(0, strlen($characters) - 1)];
    }
if (is_array($arr) && in_array($string, $arr))
{
return get_coupon_code();
}
else{
$_SESSION['codes'][] = $string;
    return $string;
}
}
函数获取优惠券代码(){
$arr=$\会话['code'];
$characters='ABCDEFGHJKLMNPQRSTUZWXYZ';
$random_string_length=8;
$string='';
对于($i=0;$i<$random\u string\u length;$i++){
$string.=$characters[rand(0,strlen($characters)-1)];
}
if(is_数组($arr)&in_数组($string,$arr))
{
返回获取优惠券代码();
}
否则{
$\会话['code'][]=$string;
返回$string;
}
}

已编辑添加返回到获取优惠券代码()的内部调用

使用静态数组变量存储优惠券代码,并在返回代码之前确保该代码在数组中不可用。或者更简单地说,将代码存储在会话中处理的数组中

function get_coupon_code() {
$arr = $_SESSION['codes'];
    $characters = 'ABCDEFGHJKLMNPQRSTUZWXYZ';
    $random_string_length = 8;
    $string = '';
    for ($i = 0; $i < $random_string_length; $i++) {
        $string .= $characters[rand(0, strlen($characters) - 1)];
    }
if (is_array($arr) && in_array($string, $arr))
{
return get_coupon_code();
}
else{
$_SESSION['codes'][] = $string;
    return $string;
}
}
函数获取优惠券代码(){
$arr=$\会话['code'];
$characters='ABCDEFGHJKLMNPQRSTUZWXYZ';
$random_string_length=8;
$string='';
对于($i=0;$i<$random\u string\u length;$i++){
$string.=$characters[rand(0,strlen($characters)-1)];
}
if(is_数组($arr)&in_数组($string,$arr))
{
返回获取优惠券代码();
}
否则{
$\会话['code'][]=$string;
返回$string;
}
}

已编辑添加返回到get\u优惠券\u code()的内部调用

确保代码不重复的唯一正确方法是将代码保存到数据库、文件或内存中(如果持续时间短)

您可能还想查看PHP的
uniqid()
函数:

print_r( uniqid() );

// Sample output:
//
// 50c65cefe58b1
但这可能不符合您的解决方案,因为(a)它仍然不能保证完全唯一,(b)它在代码中引入数字(而不仅仅是字母)


文档:

确保代码不重复的唯一正确方法是将代码保存到数据库、文件或内存中(如果持续时间短)

您可能还想查看PHP的
uniqid()
函数:

print_r( uniqid() );

// Sample output:
//
// 50c65cefe58b1
但这可能不符合您的解决方案,因为(a)它仍然不能保证完全唯一,(b)它在代码中引入数字(而不仅仅是字母)



文档:

通过检查以前生成的代码。将优惠券存储在DB中(例如),并继续在do..while循环中生成优惠券,只要点击保存在DB中的代码。好笑,PeeHaa。vojtek,我不希望在数据库中存储任何东西,而是希望对照数组或其他东西进行检查。@dcolombus 1。我从来没有说过数据库。2.它并不真的认为这很好笑。3.您正在生成一些随机代码,如果不进行比较,您还希望它们100%确定唯一吗?PeeHaa,如果您可以看到上面的内容,您会注意到数据库注释指向“vojtek”。。。这也不是完全没有听说过一个人想要唯一的字符串。我的问题是如何确保每个代码都是唯一的。。。这意味着比较它们。通过检查以前生成的代码。将优惠券存储在DB中(例如),并继续在do..while循环中生成优惠券,只要您点击保存在DB中的代码。好笑,PeeHaa。vojtek,我不希望在数据库中存储任何东西,而是希望对照数组或其他东西进行检查。@dcolombus 1。我从来没有说过数据库。2.它并不真的认为这很好笑。3.您正在生成一些随机代码,如果不进行比较,您还希望它们100%确定唯一吗?PeeHaa,如果您可以看到上面的内容,您会注意到数据库注释指向“vojtek”。。。这也不是完全没有听说过一个人想要唯一的字符串。我的问题是如何确保每个代码都是唯一的。。。这意味着比较它们。你能写一点示例代码吗?特别是比较。我曾考虑在_array中使用
,但我不确定您对此有何感受?不知道这对您是否重要,但将它们保留在静态阵列中的解决方案在服务器重新启动后将无法生存。也就是说,每当PHP服务重新启动时,数组将被重新初始化为空数组。实际上,优惠券代码会因访问者而异,并且会随着每次会话而丢失。如果你想用优惠券做一些有意义或有智慧的事情,除了给人们一个随机的8个字符的字符串,这不是办法。啊,那是有道理的,如果他只运行一次,然后打印出来,不管结果如何。你能写一点示例代码吗?特别是比较。我曾考虑在_array
中使用
,但我不确定您对此有何感受?不知道这对您是否重要,但将它们保留在静态阵列中的解决方案在服务器重新启动后将无法生存。也就是说,每当PHP服务重新启动时,数组将被重新初始化为空数组。实际上,优惠券代码会因访问者而异,并且会随着每次会话而丢失。如果你想用优惠券做一些有意义或有智慧的事情,除了给人们一个随机的8个字符的字符串,这不是办法。啊,那是有道理的,如果他只运行一次,然后打印出来,不管结果如何。是的,我只需要字母和特定的字母。小心,
uniqid
是确定性的。而你用它会没事的