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

时间:2012-12-10 21:59:15

标签: 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() . "</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>";

确保生成的每个代码都是唯一的方法是什么?

2 个答案:

答案 0 :(得分:1)

确保不重复代码的唯一真正方法是将它们保存到数据库,文件中,或者将它们保存在内存中(如果持续时间很短)。

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

print_r( uniqid() );

// Sample output:
//
// 50c65cefe58b1

但这可能无法满足您的解决方案,因为(a)它仍然不能保证完全独特,并且(b)它会在代码中引入数字(而不仅仅是字母)。

文档:http://php.net/manual/en/function.uniqid.php

答案 1 :(得分:0)

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

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;
}
}

已编辑添加返回内部调用get_coupon_code()