PHP最快的二维数组搜索算法


PHP Fastest search algorithm for two dimensional array

我正在研究数据导入过程,需要为特定代码搜索不同的2维数组。数组结构如下所示:

Index ID   Code
----------------
0     34    P1
1     5     AR
2     71    Y2
3     677   UI
4     14    IO
... 

在导入文件中,我有代码,我从数据集数组(上面)获得他们的ID。我需要知道什么是最好的算法,通过代码得到ID非常快。目前我正在做这样的事情来获取id:

foreach ($dataset as $row) {
   if ($row['Code'] == $code) {
       return $row['ID'];
   }
}

注意:从数据库中获取数据集数组时,按Code升序排序。

如果代码是整数,则二进制搜索算法可能有效。在当前的场景中,它是字母数字,所以我们必须搜索另一个算法。

在我看来,与其在数组中搜索,不如在从数据库中获取的同时搜索。

"SELECT * FROM table_name WHERE `Code` = '".$code."'"

因为如果你的表有太多的记录,那么它将只获取所需的一条。

如果你的数据已经按Code排序,那么最快的方法肯定是在Code上进行二叉搜索,给O(log n)平均性能。

这个链接提供了一些在PHP数组上执行二进制搜索的代码,您可以根据自己的目的进行调整。

如果我理解正确的话,您执行了多次搜索?在这种情况下,最快的算法将是使用哈希。首先将您的数据(这只会发生一次)复制到一个,将代码转换为密钥。这有点昂贵,但只发生一次:

foreach ($rows as $r) {
   $indexedData[$r['Code']] = $id;
}

然后搜索变成单个查找:

function findIdByCode($code) {
   global $indexedData;
   return $indexedData[$code];
}