이 질문은 내가 항상 값싼 느린 서버 (또는 트래픽이 많은 서버)에서도 실행할 수있는 최적화 된 코드를 작성하는 것을 좋아하기 때문에 나에게만 해당됩니다.
주위를 둘러 보니 답을 찾을 수 없었습니다. 필자의 경우 배열의 키가 중요하지 않다는 점을 염두에두고이 두 예제 사이에서 무엇이 더 빠른지 궁금합니다 (당연히 의사 코드).
<?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 공격을 피할 수 있습니다.