この質問は、安価で低速なサーバー (または大量のトラフィックを持つサーバー) でも実行できる最適化されたコードを常に書きたいので、私だけに向けたものです。
私は周りを見回しましたが、答えを見つけることができませんでした。私の場合、配列のキーは重要ではないことを念頭に置いて、これら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 攻撃の可能性を回避できます。