我想要做的是我有一个看起来像这样的文件:
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,
我如何做到这一点?任何帮助都将非常感激!
答案 0 :(得分: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);