1

我的代码:

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

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

4

2 回答 2

1

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

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

print_r( uniqid() );

// Sample output:
//
// 50c65cefe58b1

但这可能不符合您的解决方案,因为 (a) 它仍然不能保证是完全唯一的,并且 (b) 它在代码中引入了数字(不仅仅是字母)。

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

于 2012-12-10T22:05:34.700 回答
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() 的内部调用

于 2012-12-10T22:02:57.707 回答