我在laravel控制器中创建了此函数。
function incrementalHash($len = 5){
$charset = "0123456789abcdefghijklmnopqrstuvwxyz";
$base = strlen($charset);
$result = '';
$now = explode(' ', microtime())[1];
while ($now >= $base){
$i = $now % $base;
$result = $charset[$i] . $result;
$now /= $base;
}
return substr($result, -5);
}
然后我有一个函数可以在数据库中插入一些东西。此功能使用上述功能。但是每次使用它时,我都会从上述函数中得到相同的结果。我尝试了composer dump-autoload
,结果发生了变化。我不知道发生了什么事?为什么此方法总是返回相同的结果。我如何使用此方法,并且不转储自动加载而不会收到相同的结果?这是我的控制器:
public function add_user_create()
{
$user = new User;
$user->user_id = Request()->input('user_id');
$user->user_name = Request()->input('user_name');
$user->fcm = Request()->input('fcm');
$user->email = Request()->input('email');
$user->token = Request()->input('token');
$user->profile_pic = Request()->input('profile_pic');
$user->api_token = str_random(60);
$user->ref_ID = $this->incrementalHash(4);
$user->save();
}
答案 0 :(得分:0)
我建议您使用Laravel提供的内容生成随机字符串。像:@ kenken9999
所述的strtolower(str_random(4))
但是,这是为什么我认为为您带来了相同的结果:
我多次执行了您的函数,这些是输出:
becpy
becqa
becqd
becqd
becqe
我认为当您检查它们时,它们恰好是相同的,而当您进行composer dump-autoload
时,您偶然会看到不同的输出。
如果我错了,请告诉我。
答案 1 :(得分:0)
您是否在很短的时间内多次调用了此函数?然后,我认为问题是microtime()
。此函数返回以空格分隔的字符串。第一部分是秒的小数部分,第二部分是秒的整数部分。
因此,如果在同一秒内调用该函数,则$now
应该相同,基于此,$result
不会改变。
此外,如果在短时间内(比如说几秒钟)调用了该函数,则$now
将会是相似的(例如1283846202
和1283846203
)。在这种情况下,只有$result
的右侧会有所不同。