我有以下简单的代码来测试我正在创建的主键上的冲突:
$machine_ids = array();
for($i = 0; $i < 100000; $i++) {
//Generate machine id returns a 15 character alphanumeric string
$mid = Functions::generate_machine_id();
if(in_array($mid, $machine_ids)) {
die("Collision!");
} else {
$machine_ids[] = $mid;
}
}
die("Success!");
Run Code Online (Sandbox Code Playgroud)
知道为什么这需要花很多分钟才能运行?无论如何要加快速度?
ajr*_*eal 14
for($i = 0; $i < 100000; $i++)
{
//Generate machine id returns a 15 character alphanumeric string
$mid = Functions::generate_machine_id();
if (isset($machine_ids[$mid]))
{
die("Collision!");
}
$machine_ids[$mid] = true;
}
Run Code Online (Sandbox Code Playgroud)
Ama*_*dan 12
为此,使用$mid键作为键,将虚拟值用作值.具体来说,而不是
if(in_array($mid, $machine_ids)) {
die("Collision!");
} else {
$machine_ids[] = $mid;
}
Run Code Online (Sandbox Code Playgroud)
使用
if(isset($machine_ids[$mid])) {
die("Collision!");
} else {
$machine_ids[$mid] = 1;
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以提取最初想要的数组array_keys($machine_ids).
这应该快得多.如果它仍然很慢,那么你Functions::generate_machine_id()的速度很慢.
已编辑isset根据评论添加.