【问题标题】:PHP search and display results with keywordsPHP搜索并显示带有关键字的结果
【发布时间】:2012-06-09 10:03:59
【问题描述】:

我想要做的是我有一个看起来像这样的文件:

Blue = 1 = No = 20,
Arctic color = 2 = No = 20,
Pink = 3 = No = 20,
Arctic blue color = 4 = No = 20,
Red = 5 = No = 20,
Orange = 6 = No = 20,

假设用户在表单中输入了短语“arctic color”。我想要我的代码做的是显示所有包含“北极颜色”短语的行。所以代码应该回显:

Arctic color = 2 = No = 20,
Arctic blue color = 4 = No = 20,

但是,我该如何做到这一点?任何帮助将不胜感激!

【问题讨论】:

  • 所以你想获取查询的第一个词并搜索它?搜索词是否需要位于行首?来吧,给我们更多的细节。
  • 我想获取完整的搜索查询并查找查询中的任何单词是否在文件的任何行中找到。如果是,我希望脚本回显包含查询中任何一个单词的行。
  • 这种结构化数据通常保存在 SQL 数据库中,而不是文本文件中。这使得复杂的查询变得更加容易和高效。

标签: php search scripting


【解决方案1】:

我建议将结构化数据存储在某种数据库中。例如,mysql。 然后你可以发出一个LIKE 查询。使用左侧的通配符,这将执行全表扫描,这可能不是问题,具体取决于您拥有的行数。

如果您需要更高性能的解决方案,则需要将数据转换为更易于搜索的格式。


如果您只想解决您的确切问题:

查找包含所有单词的行:

$query = 'arctic color';

$terms = array_filter(array_map('trim', explode(" ", $query)));
$results = array();

foreach(file('file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
    $found = true;

    foreach($terms as $term) {
        if(strpos($line, $term) === false) {
            $found = false;
            break;
        }
    }

    if($found) {
        $results[] = $line;
    }
}

print_r($results);

查找包含以下单词的行:

$query = 'arctic color';

$terms = array_filter(array_map('trim', explode(" ", $query)));
$results = array();

foreach(file('file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
    $found = false;

    foreach($terms as $term) {
        if(strpos($line, $term) !== false) {
            $found = true;
            break;
        }
    }

    if($found) {
        $results[] = $line;
    }
}

print_r($results);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 2014-03-07
    • 2012-02-16
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2011-08-15
    相关资源
    最近更新 更多