Php 搜索带有权重的文件名
我有成千上万的文件。 我希望用户能够键入一些单词,因此他应该得到一个文件列表,根据给定单词的权重排序。 字符串中的位置本身是不相关的。重要的是给定单词之间的距离。单词分开得越远,结果就越不重要。部分匹配并不重要,应该显示在列表的底部 例如: 搜索字符串:“foo-bar” 预期结果(粗体字符仅用于可见性)Php 搜索带有权重的文件名,php,Php,我有成千上万的文件。 我希望用户能够键入一些单词,因此他应该得到一个文件列表,根据给定单词的权重排序。 字符串中的位置本身是不相关的。重要的是给定单词之间的距离。单词分开得越远,结果就越不重要。部分匹配并不重要,应该显示在列表的底部 例如: 搜索字符串:“foo-bar” 预期结果(粗体字符仅用于可见性) foobar.txt foobar其他长字符串.txt foo2barother long string.txt 测试foobarother long string.txt test tes
- foobar.txt
- foobar其他长字符串.txt
- foo2barother long string.txt
- 测试foobarother long string.txt
- test testfooqweqwebarother long string.txt
- fooqweqwe.txt
- 栏qweqwe.txt
- “DIN 107[1974-04].pdf'-50%
- “DIN 4107[1978-01].pdf'-48.3%
- “DIN V 18035-6.pdf”-也是50%
<?php
$a = [
'bar qweqwe.txt',
'foo bar other long string.txt',
'foo bar.txt',
'foo qweqwe.txt',
'foo2 bar other long string.txt',
'test foo bar other long string.txt',
'test test foo qweqwe bar other long string.txt'
];
function f($s) {
$n = strpos($s, 'foo');
if ($n === false) {
return false;
}
$n2 = strpos($s, 'bar');
if ($n2 === false) {
return false;
}
return abs($n2 - $n);
}
function f2($s, $s2) {
$n = f($s);
if ($n === false) {
return 1;
}
$n2 = f($s2);
if ($n2 === false) {
return -1;
}
return $n <=> $n2;
}
usort($a, 'f2');
foreach ($a as $s) {
echo $s, "\n";
}
您必须首先明确您的搜索条件。是否希望搜索词在文件名中的位置有所不同?看起来是这样,但我怀疑这是个好主意。部分匹配呢?我们不能为你编造这些东西。是的,你是对的。。我编辑了我的问题。这是一次勇敢的尝试,但我相信“foo-bar”只是一个测试字符串。它可能也适用于“炎热的夏夜”和“巧克力”。也许在你的回答中报告输出是个好主意?@KIKOSoftware我的回答只是一个开始。我同意,OP应该走自己的路。这个问题很模糊,所以你的回答和预期的一样好。