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

时间:2015-01-21 01:56:10

标签: php arrays iteration increment

假设我有一系列用户名:

[
'john.doe',
'john.doe1',
'john.doe2',
'john.doe4',
'john.doe5'
]

现在新用户注册为john.doe。我使用LIKE查询从数据库中获取已存在的john.doe并存储在上面的数组中。然后我想迭代那个数组,看看哪个点可用于新注册的john.doe。

在这种情况下,可用的地点是john.doe3。

我知道如何使用while循环执行此操作,只需添加增量直到没有匹配。

基本上我有两个问题:

  • 这是完全接近此重复用户名问题的正确方法吗?

  • 我想知道是否有更好的方法来代替使用while循环?

1 个答案:

答案 0 :(得分:0)

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