4

次のように、ランダムなユーザー名を生成する小さな機能を実行しています。

public static function nicknames($data) {
    if ($data['request'] == 'nickAvailable') {

        foreach ($data as $value)
            if (is_array($value))
                $nick = $value['nickname'];

        $random = rand(2, 2);
        $nickname = $nick . '_' . $random;

        $count = 3;
        $nicknames = array();
        for ($i = 1; $i <= $count; $i++) {
            $select = self::$db->select('users', 'nickname', array('nickname' => $nickname));

            if (count($select) == 0) {
                $nicknames[] = $nickname;
            } else {
                $count = $count + 1;
            }
        }

        $array = array("status" => 0,
            "errors" => $nicknames,
            "data" => array());

        model::json($array);
    }

}

私が抱えている唯一の問題は、$randomループごとではなく、1回だけ実行されることです。配列に含めるには 3 つの異なるユーザー名が必要であり、それらは互いに異なる必要があります。これを実現するためにコードを編集するにはどうすればよいですか? 提案をありがとう

4

2 に答える 2

1

乱数ジェネレーターとニックネーム構築変数をループの先頭に配置します。2また、現時点では常に返されるため、rand が返すことのできる数値の範囲を広げます。

$usernames = array();
do {

 // inside generate random number, 
 // build nickname, 
 // query to see if its taken, 
 // and if NOT taken, add to the usernames array

} while(count($usernames) < 3);
于 2013-07-22T13:36:00.240 に答える
1

現時点では、乱数を生成していません。

$random = rand(2, 2);

これは常に2.

これが私がそれを行う方法です:

for ($i = 1; $i <= $count; $i++) 
    {

    $random = rand(1, 3);
    $nickname = $nick . '_' . $random;
        $select = self::$db->select('users', 'nickname', array('nickname' => $nickname));

        if (count($select) == 0) {
            $nicknames[] = $nickname;
        } else {
            $count = $count + 1;
        }
    }

お役に立てれば!

于 2013-07-22T13:42:53.130 に答える