在PHP中,有没有比在数组中搜索更快的方法?

在PHP中,有没有比在数组中搜索更快的方法?,php,arrays,performance,search,Php,Arrays,Performance,Search,我需要对照CSV文件(1000000+)中的大量(且不断增长的)字符串列表检查一些输入字符串。我当前加载数组中的每个字符串,并通过in_array()对其进行检查。代码如下所示: $filter = array(); $filter = ReadFromCSV(); $input = array("foo","bar" /* more elements... */); foreach($input as $i){ if(in_array($i,$filter)){ // do st

我需要对照CSV文件(1000000+)中的大量(且不断增长的)字符串列表检查一些输入字符串。我当前加载数组中的每个字符串,并通过in_array()对其进行检查。代码如下所示:

$filter = array();
$filter = ReadFromCSV();

$input = array("foo","bar" /* more elements... */);
foreach($input as $i){
  if(in_array($i,$filter)){
    // do stuff
  }
}
这已经花了一些时间,我想知道有没有更快的方法来实现这一点?

in_array()
检查数组中的每个元素,直到找到匹配项。平均复杂度为O(n)

因为您正在比较字符串,所以可以将输入存储为数组键而不是值,并通过
array_key_exists()查找它们需要一个恒定的时间O(1)

一些代码:

$filter = array();
$filter = ReadFromCSV();
$filter = array_flip($filter); // switch key <=> value

$input = array("foo","bar" /* more elements... */);
foreach($input as $i){
  if(array_key_exists($i,$filter)){ // array_key_exists();
    // do stuff
  }
}
$filter=array();
$filter=ReadFromCSV();
$filter=array_flip($filter);//开关键值
$input=数组(“foo”,“bar”/*更多元素…*/);
foreach($i输入){
如果(array_key_exists($i,$filter)){//array_key_exists();
//做事
}
}
in_array()
检查数组中的每个元素,直到找到匹配项。平均复杂度为O(n)

因为您正在比较字符串,所以可以将输入存储为数组键而不是值,并通过
array_key_exists()查找它们需要一个恒定的时间O(1)

一些代码:

$filter = array();
$filter = ReadFromCSV();
$filter = array_flip($filter); // switch key <=> value

$input = array("foo","bar" /* more elements... */);
foreach($input as $i){
  if(array_key_exists($i,$filter)){ // array_key_exists();
    // do stuff
  }
}
$filter=array();
$filter=ReadFromCSV();
$filter=array_flip($filter);//开关键值
$input=数组(“foo”,“bar”/*更多元素…*/);
foreach($i输入){
如果(array_key_exists($i,$filter)){//array_key_exists();
//做事
}
}
in_array()
检查数组中的每个元素,直到找到匹配项。平均复杂度为O(n)

因为您正在比较字符串,所以可以将输入存储为数组键而不是值,并通过
array_key_exists()查找它们需要一个恒定的时间O(1)

一些代码:

$filter = array();
$filter = ReadFromCSV();
$filter = array_flip($filter); // switch key <=> value

$input = array("foo","bar" /* more elements... */);
foreach($input as $i){
  if(array_key_exists($i,$filter)){ // array_key_exists();
    // do stuff
  }
}
$filter=array();
$filter=ReadFromCSV();
$filter=array_flip($filter);//开关键值
$input=数组(“foo”,“bar”/*更多元素…*/);
foreach($i输入){
如果(array_key_exists($i,$filter)){//array_key_exists();
//做事
}
}
in_array()
检查数组中的每个元素,直到找到匹配项。平均复杂度为O(n)

因为您正在比较字符串,所以可以将输入存储为数组键而不是值,并通过
array_key_exists()查找它们需要一个恒定的时间O(1)

一些代码:

$filter = array();
$filter = ReadFromCSV();
$filter = array_flip($filter); // switch key <=> value

$input = array("foo","bar" /* more elements... */);
foreach($input as $i){
  if(array_key_exists($i,$filter)){ // array_key_exists();
    // do stuff
  }
}
$filter=array();
$filter=ReadFromCSV();
$filter=array_flip($filter);//开关键值
$input=数组(“foo”,“bar”/*更多元素…*/);
foreach($i输入){
如果(array_key_exists($i,$filter)){//array_key_exists();
//做事
}
}

索引就是为了这个目的而发明的


<> p>这不是iNARAARY()的问题,随着数据的增长,您应该考虑通过将数据加载到一个真正的DBMS中使用索引。

< P>这是索引的发明。


<> p>这不是iNARAARY()的问题,随着数据的增长,您应该考虑通过将数据加载到一个真正的DBMS中使用索引。

< P>这是索引的发明。


<> p>这不是iNARAARY()的问题,随着数据的增长,您应该考虑通过将数据加载到一个真正的DBMS中使用索引。

< P>这是索引的发明。


这与in_array()的速度无关,随着数据的增长,你可能应该考虑通过将数据加载到一个真正的DBMS中来使用索引。

也许你应该考虑使用DB,而不是每次从CSV读取值到内存。也许你应该考虑使用DB,而不是每次从CSV读取值到内存。也许你应该考虑使用DB而不是读取。每次将CSV中的值读入内存。也许你应该考虑使用DB,而不是每次将CSV中的值读入内存。哇。。这真的很重要。为什么in_数组不能那么快?它只在比较字符串时才起作用。数组键类型限制为
整数
字符串
,而数组值可以是任何值。哇。。这真的很重要。为什么in_数组不能那么快?它只在比较字符串时才起作用。数组键类型限制为
整数
字符串
,而数组值可以是任何值。哇。。这真的很重要。为什么in_数组不能那么快?它只在比较字符串时才起作用。数组键类型限制为
整数
字符串
,而数组值可以是任何值。哇。。这真的很重要。为什么in_数组不能那么快?它只在比较字符串时才起作用。数组键类型限制为
整数
字符串
,而数组值可以是任何值。