假设我有一系列用户名:
[
'john.doe',
'john.doe1',
'john.doe2',
'john.doe4',
'john.doe5'
]
现在新用户注册为john.doe。我使用LIKE查询从数据库中获取已存在的john.doe并存储在上面的数组中。然后我想迭代那个数组,看看哪个点可用于新注册的john.doe。
在这种情况下,可用的地点是john.doe3。
我知道如何使用while循环执行此操作,只需添加增量直到没有匹配。
基本上我有两个问题:
这是完全接近此重复用户名问题的正确方法吗?
我想知道是否有更好的方法来代替使用while循环?
答案 0 :(得分:0)
不 - 更好地使用身份令牌,请考虑添加第三个值,例如: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);
}