如果字符串中包含分隔的单词,则返回结果-PHP

时间:2020-05-07 01:14:12

标签: php jquery mysql

我正在尝试从大型数组中返回所有包含要搜索的“标签”的结果。

希望我可以清楚地解释这一点,要搜索的数组如下所示:

array(
    0 => 'DogCatSheepBlue WhaleShark',
    1 => 'CatPigGoatOtter',
    2 => 'ElephantTigerDogBlue WhaleGoat',
    3 => 'SeahorseSnakeGoatLion',
    ....
);

有一个输入框,您可以输入搜索内容,例如,如果输入Cat Whale,如何返回数组的结果0 12

在搜索框中输入“空格”时,它应单独考虑这些单词。例如,如果搜索了GoatSeahorse,即使从技术上来说GoatSeahorse都包含在数组项3中,它也不应该返回上述任何结果。 / p>

在页面加载时从MySQL查询返回数组,然后将搜索输入通过jQuery AJAX转发到PHP代码,以创建新的过滤后的数组列表,然后将其传递回HTML页面。

希望这是有道理的-任何建议都将不胜感激。我也很高兴听到是否有一种更简单的方法来实现这一目标,即使它涉及以其他格式存储数组或MySQL字段。

谢谢!

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用explode在空格处分割输入字符串,然后从单词中创建一个正则表达式(过滤以删除由输入中的多个空格引起的任何空字符串),然后进行过滤使用array_filterpreg_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
)

Demo on 3v4l.org