PHP生成随机用户名

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只被执行一次而不是每次循环都执行。我需要在数组中有3个不同的用户名,并且它们必须彼此不同。 我该如何修改代码以实现此目的? 感谢任何建议。
2个回答

1
将随机数生成器和昵称构建变量放在循环的开头。同时增加rand允许返回的数字范围,因为目前它总是返回2
$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);

谢谢,它起作用了。如果用户名已经存在,增加$count的值是否正确?我在我的代码中这样做,但我不确定for循环实际上会增加1个循环,就像我期望的那样。 - user2426701
1
我已经添加了一个基本示例,展示了我的处理方法。你现在的计数器递增方式意味着只有在找到重复的用户名时才会递增,这意味着如果前三个生成的名称已经被占用,你可能会生成数百万个用户名,或者根本没有返回任何用户名。 - Lee

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

希望这可以帮到你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接