假设我有一个用户名数组:
[
'john.doe',
'john.doe1',
'john.doe2',
'john.doe4',
'john.doe5'
]
现在,一个新用户注册为 john.doe。我已经使用 LIKE 查询从数据库中获取了已经存在的 john.doe,并存储在上面的数组中。然后我想遍历该数组,看看哪个位置可用于新注册的 john.doe。
在这种情况下,可用位置将是john.doe3。
我知道如何使用 while 循环并简单地添加一个增量直到没有匹配项来做到这一点。
基本上我有两个问题:
这是完全解决此重复用户名问题的正确方法吗?
我想知道是否有更好的方法来代替使用 while 循环?
-
不 - 最好使用标识令牌,请考虑添加第三个值,例如:
md5('username'.'date')
或md5('username'.'fullname')
,然后您可以为特定用户使用此标识符。更好的做法是仅将用户行 ID 用于关系和任何查询,并且您使用用户名(+密码)的唯一步骤是在登录时。
-
给你:
//without while: /* NOT TESTED */ /* $uname -> is the username requested without the duplicate number */ function find_aspot($arr, $uname) { natsort($arr); if (empty($arr) || $arr[0] !== $uname) return $uname; foreach($arr as $key => $data) { $cur = str_replace($uname,'',$data); $cur = ($cur === '')?0:intval($cur); if (!isset($arr[$key+1])) break; $next = intval(str_replace($uname,'',$arr[$key+1])) if ($cur+1 !== $next) break; } return $uname.($cur+1); }