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

时间:2013-05-09 18:37:51

标签: php algorithm search

我正在进行数据导入过程,需要搜索不同的二维数组以获取特定代码。数组结构如下所示:

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'];
   }
}

注意:从数据库中提取时,数据集数组按升序排序代码

如果代码是整数,则二进制搜索算法可能有用。在当前情况下,它是字母数字,因此我们必须搜索另一种算法。

3 个答案:

答案 0 :(得分:2)

在我看来,不是在数组中搜索,而是在从db获取时搜索更好。

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

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

答案 1 :(得分:1)

如果您的数据已经按Code排序,那么最快的方式肯定是Code上的二分搜索,平均效果为O(log n)

This link提供了一些代码,用于对PHP数组执行二进制搜索,以便您可以根据自己的需要进行调整。

答案 2 :(得分:0)

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

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

然后搜索变成单个查找:

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