这个问题只是为了我自己,因为我总是喜欢编写可以在廉价慢速服务器上运行(或者在流量很大的服务器上运行)的优化代码。
我找了一圈,但没有找到答案。我想知道在这两个示例中哪一个更快,同时要记住,在我的情况下,数组键不重要(伪代码自然):
<?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)。