首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的strpos

数组的strpos
EN

Stack Overflow用户
提问于 2012-01-17 01:09:31
回答 3查看 1.6K关注 0票数 2

假设我的数组中有90个“索引”,并且我有一个检查该数组中是否存在该值的函数,如果我使用带有字符串的strpos,会不会更快?

而不是使用in_array()

代码语言:javascript
复制
$data = array('John','Mary','Steven');

它将是

代码语言:javascript
复制
$data = 'John.Mary.Steven';

然后我就在那根线上使用strpos()

EN

回答 3

Stack Overflow用户

发布于 2012-01-17 01:15:31

不必费心去分析它,我会说,后跟strpos的内爆字符串将比PHP的内置in_array()函数更慢。因为在使用strpos()之前,您已经将整个数组(全部90个元素)转换为字符串的所有开销都增加了。过早的微优化不是一个好主意,除非你真的需要它,然后你应该测试你的想法。

编辑

如果您使用自己的函数而不是in_array(),它可能会更慢,但会引发“为什么”的问题?

票数 3
EN

Stack Overflow用户

发布于 2012-01-17 01:26:15

我很确定strpos的使用会更慢,但我在下面做了一个测试,看起来(至少在这个特殊的情况下-搜索最后一个元素) strposin_array更快。

代码语言:javascript
复制
$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;

我得到的结果是:

代码语言:javascript
复制
0.0012338161468506
0.00036406517028809
票数 2
EN

Stack Overflow用户

发布于 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?

如果我是你,我会运行我自己的性能测试,看看什么对我的特定数据集最有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8883590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档