假设我的数组中有90个“索引”,并且我有一个检查该数组中是否存在该值的函数,如果我使用带有字符串的strpos,会不会更快?
而不是使用in_array()
$data = array('John','Mary','Steven');它将是
$data = 'John.Mary.Steven';然后我就在那根线上使用strpos()?
发布于 2012-01-17 01:15:31
不必费心去分析它,我会说,后跟strpos的内爆字符串将比PHP的内置in_array()函数更慢。因为在使用strpos()之前,您已经将整个数组(全部90个元素)转换为字符串的所有开销都增加了。过早的微优化不是一个好主意,除非你真的需要它,然后你应该测试你的想法。
编辑
如果您使用自己的函数而不是in_array(),它可能会更慢,但会引发“为什么”的问题?
发布于 2012-01-17 01:26:15
我很确定strpos的使用会更慢,但我在下面做了一个测试,看起来(至少在这个特殊的情况下-搜索最后一个元素) strpos比in_array更快。
$array = array();
for($i=0;$i<10000;$i++) {
$array[] = md5($i . date('now'));
}
$string = implode('.', $array);
$lastElement = $array[9999];
$start = microtime(TRUE);
$isit = in_array($lastElement, $array);
$end = microtime(TRUE);
echo ($end - $start) . PHP_EOL;
$start = microtime(TRUE);
$pos = strpos($string, $lastElement);
$end = microtime(TRUE);
echo ($end - $start) . PHP_EOL;我得到的结果是:
0.0012338161468506
0.00036406517028809发布于 2012-01-17 01:18:54
根据this test的说法,循环数组和使用strpos()检查会比只使用strpos()慢。他们声称in_array()实际上比使用strpos()执行foreach循环快2.4倍。
另一方面,这里的一个问题似乎表明情况并非如此。
Efficiency of Searching an Array Vs Searching in Text.... Which is Better?
如果我是你,我会运行我自己的性能测试,看看什么对我的特定数据集最有效。
https://stackoverflow.com/questions/8883590
复制相似问题