Это то, что я сделаю:
$str = 'asus company';
$brands = "asus|lenovo|dell";
//Finding every single word (separated by spaces or symbols) and putting them into $words array;
preg_match_all('/\b\w+\b/', $str, $words);
//Setting up the REGEX pattern;
$pattern = implode('|', $words[0]);
$pattern = "/$pattern/i";
//Converting brands to an array to search with
$array = explode('|', $brands);
//Searching
$matches = preg_grep($pattern, $array);
Вы столкнетесь с несколькими проблемами есть: Если строка имеет запятые или другие символы, то мы не можем просто использовать взрываются отделиться, вот почему я использовал preg_match все, чтобы отделить их и настроить шаблон ,
С помощью preg_grep вы избежите проблем с верхним/нижним регистром.
Вы также можете array_intersect($words, $array)
там ответили @Znarkus, вместо создания рисунка и preg_grep()
, но убедитесь, что вы strtolower()
$brands
и $str
перед преобразованием в массив, я не уверен, если array_intersect() является случай чувствительны.
Будет ли ваша строка всегда в одном формате? Если это так, я предлагаю вам проанализировать строку, используя '' и '|', и сохранить ее как массив. После этого вы можете легко использовать 'in_array()' для проверки соответствия. – Maz
См. Ответ Яри для быстрого и простого способа, если у вас всегда есть одинаковые '|' разделенный список брендов. Если вы хотите найти соответствующие шаблоны в строках в целом, вы можете использовать дерево суффиксов. – Christoph
Да, бренды будут иметь одинаковый формат. Я собираюсь попробовать с чаем Джариса. – fefe