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

不。很可能 trie 更有效,并且您没有对字典进行排序,并且它不使用二叉树或三叉树。我想如果你需要在一个巨大的字典中搜索你的方法太慢了。

于 2013-03-17T06:48:12.343 回答
2

这是我想要做的最有效的代码吗?

肯定不是。
为了只找到一根针,您正在处理所有条目。

我将建立有 100,000 多个条目。

然后使用数据库。

于 2013-03-17T07:34:24.850 回答