我的代码:
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>";
确保生成的每个代码都是唯一的方法是什么?
答案 0 :(得分:1)
确保不重复代码的唯一真正方法是将它们保存到数据库,文件中,或者将它们保存在内存中(如果持续时间很短)。
您可能还想查看PHP的uniqid()
函数:
print_r( uniqid() );
// Sample output:
//
// 50c65cefe58b1
但这可能无法满足您的解决方案,因为(a)它仍然不能保证完全独特,并且(b)它会在代码中引入数字(而不仅仅是字母)。
答案 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()