在搜索效率方面,数组搜索和文本搜索哪个更好?

4

我有一个(整数)ID的列表,我将其存储为文本,例如:

23;45;67;12;332;783;123;33;15;87;41;422;88;58;

我现在正在使用PHP技术,想要检查某个ID是否已存在于TEXT中。我有一个名为explode的函数,它可以给我提供一个数字数组,然后我可以使用in_array函数,或者直接使用strpos函数来在文本中查找

据你看,哪一种方法会更有效呢?

感谢您抽出时间来阅读这篇文章。


1
你试过测量差异吗? - Carl Norum
抱歉,我现在想我应该尝试过,但是没有。我只是在网上搜索已有的任何结果。 - Pheonix
这也取决于您是否会多次搜索一个整数字符串,还是只搜索每个字符串一次。 - nos
我只会搜索一次字符串。 - Pheonix
2个回答

4
如果你只需要查找一个ID,那么strpos()会更加高效,因为它只需要查找一个id;的出现,而explode()则需要做更多的工作,更不用说昂贵的in_array()调用了。

此外,应该考虑到数组消耗的内存比字符串使用的内存要大得多。 - Lumbendil
谢谢,所以对我来说strpos是答案,因为我只搜索一次。 - Pheonix
1
@Pheonix,如果你只需要找到一次,strpos()会快得多。但是请考虑在字符串前加上 ; 前缀,这样您就可以搜索 ;id;,否则即使您没有ID 1,也会匹配 1;,并且有 11 - rid
好的,非常感谢,这可能会让我免于未来的麻烦 :) - Pheonix

4

strpos()非常快速。但是,如果你同时使用explode()array_flip,你会得到一个数组,其中所有的键都是你的ID,并且你只需要使用isset($keys[$id])。这样会更快,因为它是直接在哈希表中查找,但是explode()+ array_flip()的成本很高,所以只有在同一请求期间对相同数据进行多个查找时才值得这样做。


谢谢,你的回复让我获得了一些额外的知识,可能在未来会用到。 - Pheonix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接