安い低速サーバー(または大量のトラフィックを持つサーバー)でも実行できる最適化されたコードを常に書きたいので、この質問は単に私にとってのものです。
周りを見回したが答えが見つからなかった。私の場合、配列のキーは重要ではない(当然のことながら擬似コードです)ことを念頭に置いて、これらの2つの例の間で何が速いのか疑問に思いました。
<?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)]
。それでも衝突が発生する可能性がありますが、ユーザー提供のファイル(http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html)から読み取るときに、DoS攻撃の可能性を排除します