我建议将结构化数据存储在某种数据库中。例如,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);