Questa domanda è solo per me poiché mi piace sempre scrivere codice ottimizzato che possa essere eseguito anche su server lenti economici (o server con MOLTO traffico)
Mi sono guardato intorno e non sono riuscito a trovare una risposta. Mi chiedevo cosa sia più veloce tra questi due esempi tenendo presente che le chiavi dell'array nel mio caso non sono importanti (pseudo-codice naturalmente):
<?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
}
}
?>
Poiché il punto della domanda non è la collisione dell'array, vorrei aggiungere che se hai paura di collidere inserti per $a[$new_value]
, puoi usare $a[md5($new_value)]
. può ancora causare collisioni, ma eliminerebbe un possibile attacco DoS durante la lettura da un file fornito dall'utente ( http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html )