2

次のコードを使用して、2つの列(単語、定義)のみを持つタブ区切りファイルから単語の定義を取得しています。これは私がやろうとしていることに対して最も効率的なコードですか?

<?php
$haystack  = file("dictionary.txt");
$needle = 'apple';

$flipped_haystack = array_flip($haystack);

foreach($haystack as $value)
    {
    $haystack = explode("\t", $value);

    if ($haystack[0] == $needle)
        {
        echo "Definition of $needle: $haystack[1]";
        $defined = "1";
        break;
        }
    }

if($defined != "1")
    {
    echo "$needle not found!";
    }
?>
4

3 に答える 3

5

あなたは今、意味のない仕事をたくさんしている

1) load the file into a per-line array
2) flip the array
3) iterate over and explode every value of the array
4) test that exploded value

ステップ 1 を避けることはできませんが、なぜ 2 と 3 で無駄な「忙しい仕事」をしなければならないのでしょうか。

たとえば、辞書のテキストが次のように設定されている場合:

word:definition

次に簡単です:

$matches = preg_grep('/^$word:(.*)$/', $haystack);

はるかに少ないコードで、あなたのためにトリックを行います.

于 2013-03-17T06:58:23.783 に答える
2

これは私がやろうとしていることの最も効率的なコードですか?

確かにそうではありません。針を1 つ
だけ見つけるには、すべてのエントリを処理しています。

100,000 件以上のエントリを作成する予定です。

次にデータベースを使用します。

于 2013-03-17T07:34:24.850 に答える
2

いいえ。ほとんどの場合、トライはより効率的であり、辞書をソートしておらず、二分木や三分木を使用していません。巨大な辞書を検索する必要がある場合、その方法は単に遅すぎると思います。

于 2013-03-17T06:48:12.343 に答える