Я пытаюсь сопоставить слово со списком имен тегов в массиве, используя preg_grep
$tagOptArray = array("Corporate", "Exporters", "Buyers", "News", "Apparel","Aquarium Fish", "Boat and Ship Building");
$subBlockTag = "Boat";
$tag = preg_grep('/' . $subBlockTag . '[.]*/i', $tagOptArray);
var_dump($tag);
это приводит к следующему результату.
array(1) { [6]=> string(22) "Boat and Ship Building" }
Но когда $subBlockTag = "Boat Building";
это возвращает пустой массив, который не ожидается, так как он должен совпадать с «Boat and Ship Building» в массиве тегов.
РЕДАКТИРОВАТЬ
Ниже приведены возможные теги, которые могут быть назначены для $subBlockTag
$subBlockTag = "Boat Building";
$subBlockTag = "Ornamental Fish";
$subBlockTag = "Fish";
$subBlockTag = "Fruits and Vegetables";
$subBlockTag = "Diamond and Jewellery";
Если у вас есть обычные слова, разделенные пробелами в $tagOptArray
и вам нужно сопоставить элементы, содержащие слова в том же порядке, вы можете заменить все пробелы на .*
и используйте ваш подход:
$tagOptArray = array("Corporate", "Exporters", "Buyers", "News", "Apparel","Aquarium Fish", "Boat and Ship Building");
$subBlockTag = "Boat Building";
$tag = preg_grep('/' . preg_replace("~\s+~", ".*", trim($subBlockTag)) . '/is', $tagOptArray);
print_r($tag);
Увидеть PHP демо.
Я предлагаю также использовать trim($subBlockTag)
чтобы избежать .*
на лидирующих / трейлинг-позициях, особенно на лидирующих позициях, чтобы избежать проблем с производительностью. Это может быть медленно, если у вас есть очень длинные тексты для обработки.
Чтобы найти совпадение, когда в строке присутствуют все слова, разделенные пробелами, вам нужно создать регулярное выражение с положительными подсказками в начале:
$tagOptArray = array("Corporate", "Exporters", "Buyers", "News", "Apparel","Aquarium Fish", "Boat and Ship Building");
$subBlockTag = "building boat";
$tag = preg_grep('/^(?=.*' . implode(")(?=.*", preg_split("~\s+~", trim($subBlockTag))) . ')/is', $tagOptArray);
print_r($tag);
Увидеть еще одна демонстрация PHP, и вот regex demo.
Присоединяйтесь к тегам с помощью регулярного выражения ИЛИ символа |
$tagOptArray = array("Corporate", "Exporters", "Buyers", "News", "Apparel","Aquarium Fish", "Boat and Ship Building","boat");
$subBlockTag = "Building Boat";
$tag = preg_grep('/' . preg_replace("~\s+~", "|",$subBlockTag) . '/is', $tagOptArray);
print_r($tag);
Выход:
Array
(
[6] => Boat and Ship Building
[7] => boat
)