To pytanie jest tylko dla mnie, ponieważ zawsze lubię pisać zoptymalizowany kod, który może działać również na tanich, powolnych serwerach (lub serwerach z DUŻYM ruchem)
Rozejrzałem się i nie mogłem znaleźć odpowiedzi. Zastanawiałem się, co jest szybsze między tymi dwoma przykładami, pamiętając, że klucze tablicy w moim przypadku nie są ważne (oczywiście pseudokod):
<?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
}
}
?>
Ponieważ nie chodzi o kolizję tablic, to dodam, że jeśli boisz się kolizji wstawek $a[$new_value]
to możesz użyć $a[md5($new_value)]
. nadal może powodować kolizje, ale eliminuje możliwy atak DoS podczas odczytu z pliku dostarczonego przez użytkownika ( http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html )