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()の内部呼び出しにreturnを追加して編集

于 2012-12-10T22:02:57.707 に答える