我正在创建将创建一个非常大的数组并搜索它们的应用程序。我只想知道是否有一个好的 PHP 数组搜索算法来完成这项任务?
示例:我有一个包含超过 2M 键和值的数组,最好的搜索方式是什么?
编辑 我创建了一个基于数组的平面文件 dbms,所以我想找到搜索它的最佳方法
有几件事:
但是在内存中存储一个 2M 键的 assoc 数组将意味着您将有大量的哈希冲突,这无论如何都会减慢您的速度。对数组进行排序,对其进行分块,并应用一个体面的搜索算法,您可能会使其工作得相当快,但老实说,我会说您将做出一个错误的决定。
还要考虑这一点:PHP 在设计上是无状态的,每次脚本运行时,数据都必须再次加载到内存中(对于每个请求,如果它是您正在编写的 Web 应用程序)。与 HashTable 上的蛮力搜索相比,这并非不可能成为更大的瓶颈。
找出这一点的最快方法是运行测试,关闭 APC(或替代方案)一次,然后再运行一次,但先缓存要搜索的数组。测量两者之间的差异,您将了解阵列的实际构造花费了多少
最好的方法是使用array_search()
. PHP 已经对它们用 C 编写的函数进行了大量优化。
如果这仍然太慢,您应该切换到另一种“编程”语言(PHP 的速度并不受欢迎)。
有一些可用的算法可以使用您的显卡并行搜索特定值。