我有一个大while循环功能,每次被加载的检查与当前URL名时间。 所以我需要知道哪一个更好,在while循环内检查URL大阵列, in_array()
或array_search()
函数。这是最好的array_search或in_array?
回答
基础的in_array和array_search的文件上,我认为,这主要取决于你想要的信息做什么:如果你需要的条目,使用array_search
,如果你只是想检查是否存在网址在阵列中,in_array
应该足够了。
如果它是一个大阵和在一个循环中,无论是“最好的”。而是在您的阵列上使用array_flip()
,因此网址成为关键字。并使用isset()
检查是否存在。
谢谢马里奥,这是另一种方法。但将该函数与in_array和array_search函数相比较,该函数是否会给出速度结果? – Thilak 2010-12-25 06:33:51
PHP在检查键的存在方面比检查值快得多。如果您需要经常参考的大量唯一值,请始终将它们设置为键。 – 2014-01-03 07:40:30
为此,原始值必须是整数或字符串。虽然它适用于OP的问题,但它不能用作一般解决方案。 – 2014-07-30 17:56:07
如果你唯一的目标就是要检查是否有URL数组我会去in_array中存在。尽管最好的方法是设置键,所以你可以通过数组键来搜索。这样你节省了很多循环。
$searchword = "test";
echo $array[$searchword];
它的不同功能 in_array - 返回true,如果发现价值 array_search - 回报的位置,如果发现价值
$a = array('a', 'b');
var_dump(in_array('a', $a)); // return true
var_dump(array_search('a', $a)); // return 0
if (array_search('a', $a)) - false
这里有没有真正的答案。所以我尝试了,我自己。
$haystack = array
(
'apple',
'banana',
'cherry',
'lemon',
'lime',
'orange',
'potato',
'rutabaga'
);
$haySize = count($haystack);
$loops = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : 10000;
// echo 'Loops: ' . $loops . "\n";
$start = microtime(true);
for ($i = 0; $i < $loops; $i++)
{
$needle = $haystack[ $i % $haySize ];
}
$zeroTime = microtime(true) - $start;
// echo sprintf('%0.3f', $zeroTime * 1000) . ' ms : zero time' . "\n";
$start = microtime(true);
for ($i = 0; $i < $loops; $i++)
{
$needle = $haystack[ $i % $haySize ];
$dummy = array_search($needle, $haystack);
}
echo sprintf('%0.3f', (microtime(true) - $start - $zeroTime) * 1000) . ' ms : array_search' . "\n";
$start = microtime(true);
for ($i = 0; $i < $loops; $i++)
{
$needle = $haystack[ $i % $haySize ];
$dummy = in_array($needle, $haystack);
}
echo sprintf('%0.3f', (microtime(true) - $start - $zeroTime) * 1000) . ' ms : in_array' . "\n";
echo sprintf('%0.3f', (microtime(true) - $start) * 1000).' ms : in_array'."\n";
对于一个典型的使用情况下,in_array胜,但不同的是可以忽略不计:
22.662 ms : array_search
22.104 ms : in_array
更新2014年1月2日:加入空操作循环到“零刻度”。在新的MacBook Pro上运行PHP 5.4.17,这是一个典型的结果:
24.462 ms : array_search
24.984 ms : in_array
它取决于您的数组大小。 - 如果你有一小阵(如< 500K的32位密钥), in_array和array_search给你同样的性能 isset(数组[针])不得因为翻转()
-By大阵列的感觉(像> 1M 32位密钥) 有in_array和isset(阵列[针])
- 1. 这是最好的$这样或自我或静态常量引用变量时?
- 2. 这是一个最好的jQuery或JavaScript图书馆?我
- 3. 这是最好的表现故事板或.Xib文件?
- 4. WCF Web服务 - 这是最好的basicHttpBinding或netTcpBinding
- 5. 这是最好的方法吗?
- 6. 这是最好的python mongodb lib
- 7. 这是最好的书或教程或博客开始的Symfony 2
- 8. 这是最好的最轻的jQuery的富文本编辑器
- 9. php array - in_array和/或array_intersect
- 10. PHP array_search
- 11. 什么是最好的Android布局或Canvas或SurfaceView或Cocos2d android?
- 12. 这是做这件事的最好方法吗?
- 13. array_search找不到元素,这显然是有
- 14. 这样做的最好方法是什么? WordPress的,页面或插件
- 15. 这是实现AsyncTask的最佳方式吗?或者有更好的方法吗?
- 16. coredata是最好的?
- 17. 外部连接或动态查询,这是最好的方式吗?
- 18. 这是更好的水晶报告或为最终报告创建PDF
- 19. 造型轴文本:这是做到最好(或唯一)的方式吗?
- 20. 什么是Windows下最好或最常用的C++编译器?
- 21. in_array既是真的也是假的
- 22. 这是WPF最好还是广泛使用的MVVM Toolkit?
- 23. 这是最好的ForeignKey还是选择?有什么不同?
- 24. 这是最好的设计模式是什么?
- 25. 哪一个是最好的OLEDB或Excel对象或数据库
- 26. Python array_flip模拟或最好的方式来做到这一点?
- 27. ObjC:最好使用这个(zBuffer)的NSArray或NSDictionnary?
- 28. PHP if或else语句 - 最好的方式做到这一点
- 29. php in_array检查数组的最佳方式是什么?
- 30. 递归array_search
取决于时间,这是最好之间真正大的差异? – Thilak 2010-12-25 06:37:20
经过长时间的参考,并取决于我的要求,我选择了in_array函数。 – Thilak 2010-12-28 11:57:09