Heim >Backend-Entwicklung >PHP-Tutorial >in_array大数组查询性能问题

in_array大数组查询性能问题

WBOY
WBOYOriginal
2016-07-29 08:59:101759Durchsuche

问题

最近在实现一个项目接口的时候发现当数组过大的时候,数据返回的速度有点慢。接口数据返回最长反应时间2s,经过反复调试发现代码段耗时最长的部分在in_array()函数。

解决过程

在stackoverflow找到了一篇提供我解决思路的文章
- which is faster, array_key_exists or array_search?

文中说到:

array_key_exists is much faster. array_search must traverse the whole array, so it is O(n). array_key_exists is a hash table lookup, so it is O(1).

----分割线----

I think it’s faster for PHP to check for keys (array_key_exists() or simply isset($array[$key])). To search for a value, PHP must cycle through the array; to search for a key PHP will use a hash function.

该数组是用来保存用户账号,一直不销毁存储在内存。

原数组
$array=array('account1','account2','$account3');

修改后的数组
$array=array('account1'=>0,'account2'=>0,'$account3'=>0)

使用isset($array[$account])) 来检测账号是否存在该数组内

总结

由于in_array()函数对数组进行遍历查询,O(n),随n(数组长度)的增大耗时将增加。所以在对大数组使用in_array()函数应考虑效率问题。

当面对大数组查询的时候,在PHP中应该尽量采用key查询而不是value查询。

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了in_array大数组查询性能问题,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:js访问php使用 webserviceNächster Artikel:apache 环境的搭建