我正在进行数据导入过程,需要搜索不同的二维数组以获取特定代码。数组结构如下所示:
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'];
}
}
注意:从数据库中提取时,数据集数组按升序排序代码。
如果代码是整数,则二进制搜索算法可能有用。在当前情况下,它是字母数字,因此我们必须搜索另一种算法。
答案 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];
}