如何在具有递增编号值的数组中找到可用点?

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 循环并简单地添加一个增量直到没有匹配项。

基本上我有两个问题:

  1. 不 - 最好使用身份令牌,考虑添加第三个值,例如:md5('username'.'date')md5('username'.'fullname') 然后您可以为特定用户使用此标识符。

    更好的做法是仅将用户行 ID 用于关系和任何查询,并且您使用用户名(+ 密码)的唯一步骤是在登录时。

  2. 给你:

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