1

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

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

注意:数据集数组在从数据库中获取时按代码升序排序。

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

4

3 回答 3

2

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

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

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

于 2013-05-09T18:42:20.453 回答
1

如果您的数据已经排序,Code那么最快的方法肯定是对 进行二进制搜索Code,从而提供O(log n)平均性能。

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

于 2013-05-09T18:39:56.903 回答
0

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

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

然后搜索变成了一个单一的查找:

function findIdByCode($code) {
   global $indexedData;
   return $indexedData[$code];
}
于 2013-05-09T19:47:26.797 回答