生成随机昵称

作者: 分类: php 时间: 2025-12-01 评论: 暂无评论
  public static function getRandNickName()
    {
        $data      = ARandWord::cache(is_test_ab() ? 100 : 86400 * 3)
            ->field('type,id')
            ->select();
        $rule      = ARandWord::NICK_RULE;
        $rand_ids  = [];
        $ids       = [];
        $rangeData = [];
        $size      = 3; //生成3个昵称验证去重

        foreach ($data as $item) {
            $rangeData[$item['type']][] = $item['id'];
        }
        foreach ($rule as $type) {
            $arr             = $rangeData[$type];
            $id = [];
            for ($j = 0;$j<$size;$j++) {
                $id[]              = $arr[array_rand($arr)];
            }
            $rand_ids[$type] = $id;
            $ids             = array_merge($ids, $id);
        }
        $keyWords = ARandWord::whereIn('id', $ids)->column('name', 'id');
        $names    = [];
        for ($i = 0; $i < $size; $i++) {
            $names[] = $keyWords[$rand_ids[1][$i]] . $keyWords[$rand_ids[2][$i]] . '的' . $keyWords[$rand_ids[3][$i]];
        }
        $db_exit    = AMem::where('nickname', 'in', $names)->column('nickname') ?? [];
        $last_names = array_diff($names, $db_exit);
        if (!empty($last_names)) {
            return array_shift($last_names);
        } else {
            //兜底基本用不上
            return '玩家' . StringUtils::getRandomStr('nl', 8);
        }
    }
标签: none

订阅本站(RSS)