2012-12-10 15 views
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

通過檢查以前生成的代碼。 – PeeHaa

+0

將優惠券存儲在數據庫中(例如),並在do..while循環中繼續生成優惠券,只要您點擊保存在數據庫中的代碼即可。 – fracz

+0

搞笑,PeeHaa。 vojtek,我寧願不在數據庫中存儲任何東西,但寧願檢查數組或其他東西。 – dcolumbus

回答

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()的內心的召喚

+0

你能寫一點樣本代碼嗎?特別是比較。 – dcolumbus

+0

好的等一下來編輯答案,我會用會話。 – SaidbakR

+0

我正在考慮使用'in_array',但我不確定你對此有何感想? – dcolumbus

1

唯一正確的方法,以確保你沒有重複的代碼是將它們保存到數據庫,文件,或保留他們在記憶中(如果持續時間很短)。

你可能也想看看PHP的uniqid()功能:

print_r(uniqid()); 

// Sample output: 
// 
// 50c65cefe58b1 

但是,這可能不符合你的解決方案,因爲(一)它仍然不能保證是完全獨特的,和(b)介紹了數字到代碼(不只是字母)。

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

+0

是的,我只需要字母和特定的字母。 – dcolumbus

+0

注意,'uniqid'是* deterministic *。雖然您可以將其用於優惠券代碼,但在安全性需要擔心的情​​況下絕不應使用它。 – Charles