例えばループ処理中重複した値を弾きたい場合、下記2つのアプローチではどちらが高速なのだろうか。
1, キャッシュ配列に値を詰め込みその後、in_array()を用いて重複値をチェックする
2, 値を配列のキーに持たせ、isset()にて添字の存在チェックい重複を弾く
結果は以下のとおり。
$cache = array();
$start = microtime(true);
for($i = 0; $i < 10000; $i++) {
	$md5 = md5($i);
	if(!in_array($md5, $cache)) {
		$cache[] = $md5;
	}
}
$end = microtime(true);
echo $end - $start."\n";
$cache = array();
$start = microtime(true);
for($i = 0; $i < 10000; $i++) {
	$md5 = md5($i);
	if(!isset($cache[$md5])) {
		$cache[$md5] = true;
	}
}
$end = microtime(true);
echo $end - $start."\n";
上はin_array()、下はisset()
5.5056478977203 0.020223140716553
その差は272倍。
圧倒的に添字アクセスの方が速い。