-2

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

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,

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

4

1 回答 1

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);
于 2012-06-09T01:48:40.210 回答