gpt4 book ai didi

具有多个关键字和排序结果的 PHP 搜索数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:25 24 4
gpt4 key购买 nike

我打算从我准备的txt文件中进行搜索,txt文件内容类似于下面这样

一个.txt

Amy Jefferson
Nathalie Johnson
Emma West
Donna Jefferson
Tanya Nathalie
George West
Emma Watson
Emma Jefferson

如果代码是这样的

a.php

$filename = "a.txt";
$example = file($filename, FILE_IGNORE_NEW_LINES);
$searchword = 'Emma Jefferson';
$matches = array();
foreach($example as $k=>$v) {
if(preg_match("/\b$searchword\b/i", $v)) {
$matches[$k] = $v;
echo $matches[$k]."<br>";
}
}

结果只会是“Emma Jefferson”

然后如果我使用这段代码

b.php

$filename = "a.txt";
$example = file($filename, FILE_IGNORE_NEW_LINES);
$searchword = 'Emma Jefferson';
$matches = array();
foreach($example as $k=>$v) {
$searchword2 = str_ireplace(" ", "|", $searchword);
if(preg_match("/\b$searchword2\b/i", $v)) {
$matches[$k] = $v;
echo $matches[$k]."<br>";
}
}

结果会是这样

Amy Jefferson
Emma West
Donna Jefferson
Emma Watson
Emma Jefferson

独特的结果,但最后一个结果是“Emma Jefferson”

所以问题是我如何搜索 Emma Jefferson,结果排序是这样的

Emma Jefferson
Emma Watson
Emma West
Amy Jefferson
Donna Jefferson

所以基本上它首先搜索“Emma Jefferson”整个单词,然后是“Emma”,最后一个是“Jefferson”

更新我为这个问题投票支持 Don't Panic 代码,但我想对这里的所有贡献者说声谢谢 Don't Panic、RomanPerekhrest、Sui Dream、Jere、i-man,你们都是最棒的!!

帕蒂极客

最佳答案

我不知道有什么方法可以使用正则表达式解决方案来考虑匹配项的位置,但是如果您将搜索字符串和术语转换为单词数组,就可以做到。

通过这种方法,我们迭代文本项并为搜索词中的每个单词构建一个位置匹配数组,然后按匹配项数和匹配项位置对结果进行排序。

$search_words = explode(' ', strtolower($searchword));

foreach ($example as $item) {
$item_words = explode(' ', strtolower($item));

// look for each word in the search term
foreach ($search_words as $i => $word) {
if (in_array($word, $item_words)) {

// add the index of the word in the search term to the result
// this way, words appearing earlier in the search term get higher priority
$result[$item][] = $i;
}
}
}

// this will sort alphabetically if the uasort callback returns 0 (equal)
ksort($result);

// sort by number of matches, then position of matches
uasort($result, function($a, $b) {
return count($b) - count($a) ?: $a <=> $b;
});

// convert keys to values
$result = array_keys($result);

关于具有多个关键字和排序结果的 PHP 搜索数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46372779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com