我正在研究数据导入过程,需要为特定代码搜索不同的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];
}