ペナルティはおそらく、コンパイル/実行時に評価されようとしています言語文字列検索操作中ではなく、それを最適化したいのであれば、あなたの言語の文字列を小さなセクションに分割し、必要に応じて各セクションをロードすることをお勧めします。
私はいくつかのテストを行いました。値を配列に代入するだけでは時間がかかりません。この関数は、ランダムな$キー値を生成し、連想配列$ key => $キーをいくつかの回数割り当てます。
function get_str() {
$retval = "";
for($j=0; $j<10; $j++) {
$retval .= chr(mt_rand(ord("A"), ord("Z")));
}
return $retval;
}
$arr = array();
$el1 = 0;
for($i=0; $i<1000000; $i++) {
$key = get_str();
$start = microtime(TRUE);
$arr[$key] = $key;
$el1 += (microtime(TRUE) - $start);
}
var_dump($el1);
結果:
10 elements 1.1920928955078E-5
100 elements 9.4175338745117E-5
1,000 elements 0.00090622901916504 // less than a millisecond
1,000,000 elements 1.0554702281952
これは非常に重い罰ではありません。 I 1,000ルックアップを実行するためにいくつかのコードを追加:
$el2 = 0;
for($i=0; $i<1000; $i++) {
$lookup = get_str();
$start = microtime(TRUE);
$val = (isset($arr[$lookup]) ? $arr[$lookup] : "");
$el2 += (microtime(TRUE) - $start);
}
var_dump($el2);
Iが10〜1,000,000配列内の要素の数を変化させ、それぞれのアレイサイズに千のルックアップを行います。結果:
10 elements 0.00072717666625977
100 elements 0.00070691108703613
1000 elements 0.00071167945861816 // less than a millisecond
1,000,000 elements 0.0008540153503418 // still less than a millisecond
あなたが見ることができるように、連想ハッシュルックアップが
も、非常に大きなデータ構造のために、効率的な滞在、あなたの悩みは何ですか? PHPでの配列アクセスはO(1)です。 – Gustek
最適化するものは何ですか? Lookupは、サイズに関係なく常に高速になります。メモリを最適化する場合は、配列を別の「ドメイン」で分割して、不要な文字列を何千も読み込まないようにすることができます。少しずつあなたは 'gettext'と家族を多かれ少なかれ再実装するでしょう。 ;) – yivi
SPLFixedArrayが気になる – hanshenrik