我正在尝试从大型数组中返回所有包含要搜索的“标签”的结果。
希望我可以清楚地解释这一点,要搜索的数组如下所示:
array(
0 => 'DogCatSheepBlue WhaleShark',
1 => 'CatPigGoatOtter',
2 => 'ElephantTigerDogBlue WhaleGoat',
3 => 'SeahorseSnakeGoatLion',
....
);
有一个输入框,您可以输入搜索内容,例如,如果输入Cat Whale
,如何返回数组的结果0
1
和2
?
在搜索框中输入“空格”时,它应单独考虑这些单词。例如,如果搜索了GoatSeahorse
,即使从技术上来说Goat
和Seahorse
都包含在数组项3
中,它也不应该返回上述任何结果。 / p>
在页面加载时从MySQL查询返回数组,然后将搜索输入通过jQuery AJAX转发到PHP代码,以创建新的过滤后的数组列表,然后将其传递回HTML页面。
希望这是有道理的-任何建议都将不胜感激。我也很高兴听到是否有一种更简单的方法来实现这一目标,即使它涉及以其他格式存储数组或MySQL字段。
谢谢!
答案 0 :(得分:0)
执行此操作的一种方法是使用explode
在空格处分割输入字符串,然后从单词中创建一个正则表达式(过滤以删除由输入中的多个空格引起的任何空字符串),然后进行过滤使用array_filter
和preg_match
的输入数组:
function search($array, $search) {
$words = explode(' ', $search);
$regex = '/(' . implode('|', array_filter($words)) . ')/';
return array_filter($array, function ($v) use ($regex) { return preg_match($regex, $v); });
}
您可以使用以下功能:
$results = array(
0 => 'DogCatSheepBlue WhaleShark',
1 => 'CatPigGoatOtter',
2 => 'ElephantTigerDogBlue WhaleGoat',
3 => 'SeahorseSnakeGoatLion'
);
print_r(search($results, 'Cat Whale'));
print_r(search($results, 'GoatSeahorse'));
print_r(search($results, 'Pig'));
输出:
Array
(
[0] => DogCatSheepBlue WhaleShark
[1] => CatPigGoatOtter
[2] => ElephantTigerDogBlue WhaleGoat
)
Array
(
)
Array
(
[1] => CatPigGoatOtter
)