输入字段通过AJAX连接到PHP,PHP连接到API,API返回艺术家和曲目名称结果。将其视为实时搜索功能。但是,API发送的膨胀需要过滤掉。
查询: 迈克尔·杰克逊·比利·简
结果: 迈克尔·杰克逊-比利·简 迈克尔·杰克逊-平稳刑事 各种艺术家-比利·简
结果存储在数组中。
如何过滤出其中没有所有搜索词的结果?结果2 en 3在这种情况下。
我尝试使用preg_grep,但是它搜索1个字符串。
$q = $_GET['q']; //michael jackson billie jean
$strings = explode(' ', $q);
$tracks = [
"Michael Jackson - Billie Jean",
"Michael Jackson - Smooth Criminal",
"Various artists - Billie Jean"
];
$matches = preg_grep('/' . $strings[0] . '/i', $tracks);
基本的正则表达式适用于第一个字符串。但是,它需要将所有字符串与数组值匹配。遍历tracks数组并在每个项目上执行preg_grep会向新数组添加许多重复项。
您可以动态地制作一个包含每个单词正向前瞻的正则表达式。您可以在这里了解正则表达式:https : //regex101.com/r/Qwjw3N/1
在PHP中,它看起来像这样:
$q = "michael jackson billie jean";
$strings = explode(' ', $q);
$tracks = [
"Michael Jackson - Billie Jean",
"Michael Jackson - Smooth Criminal",
"Various artists - Billie Jean"
];
$regex = '^(?=.*' . implode(')(?=.*', $strings) . ').*$';
$matches = preg_grep('/' .$regex . '/i', $tracks);
var_dump($matches);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句