如何在具有递增编号值的数组中找到可用点?
How to find an available spot in an array that has incrementing numbered values?
假设我有这样一组用户名:
[
'john.doe',
'john.doe1',
'john.doe2',
'john.doe4',
'john.doe5'
]
现在新用户注册为john.doe。我已经使用 LIKE 查询从数据库中获取了已经存在的 john.doe's 并存储在上面的数组中。然后我想遍历该数组以查看哪个位置可用于新注册的 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);
}
假设我有这样一组用户名:
[
'john.doe',
'john.doe1',
'john.doe2',
'john.doe4',
'john.doe5'
]
现在新用户注册为john.doe。我已经使用 LIKE 查询从数据库中获取了已经存在的 john.doe's 并存储在上面的数组中。然后我想遍历该数组以查看哪个位置可用于新注册的 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); }