PHP in_array()表现糟糕.搜索数组值的最佳方法

Jus*_*tin 11 php arrays

我有以下简单的代码来测试我正在创建的主键上的冲突:

$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根据评论添加.

  • 打败我.:)虽然你应该使用`isset($ machine_ids [$ mid])`. (2认同)