【发布时间】:2026-01-04 02:50:01
【问题描述】:
这个问题只是针对我的,因为我总是喜欢编写优化的代码,这些代码也可以在廉价的慢速服务器(或流量很大的服务器)上运行
我环顾四周,找不到答案。我想知道这两个示例之间哪个更快,记住在我的情况下数组的键并不重要(自然是伪代码):
<?php
$a = array();
while($new_val = 'get over 100k email addresses already lowercased'){
if(!in_array($new_val, $a){
$a[] = $new_val;
//do other stuff
}
}
?>
<?php
$a = array();
while($new_val = 'get over 100k email addresses already lowercased'){
if(!isset($a[$new_val]){
$a[$new_val] = true;
//do other stuff
}
}
?>
由于问题的重点不是数组冲突,我想补充一点,如果您担心$a[$new_value] 的插入冲突,您可以使用$a[md5($new_value)]。它仍然可能导致冲突,但在从用户提供的文件中读取时可以避免可能的 DoS 攻击 (http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html)
【问题讨论】:
-
如果您一直在努力编写优化的代码,那么您肯定会偶尔使用分析器吗?
-
我投票决定重新开放。问题的形式很好,答案有事实和参考资料支持。虽然是微观优化,但这些类型的问题是建设性的。
-
@JasonMcCreary 第二;还有一个。
-
这是多年后的事了,但我什至不认为这是一个微优化。对于大型数据集,它可以产生很大的不同!
-
...这个问题对我来说看起来“很有建设性”。我将开始另一个重新开放的活动。
标签: php performance micro-optimization