Другим вариантом будет использование регулярных выражений и развертывание, например:
if (preg_match('/'.implode('|', $array).'/', $searchstring, $matches))
echo("Yes, the string '{$matches[0]}' was found in the search string.");
else
echo("None of the strings in the array were found in the search string.");
Это немного меньше кода, и я ожидаю, что он будет более эффективным для больших строк или массивов поиска, так какСтрока поиска должна быть проанализирована только один раз, а не один раз для каждого элемента массива.(Хотя вы добавляете накладные расходы на имплозу.)
Единственным недостатком является то, что он не возвращает индекс массива совпадающей строки, поэтому цикл может быть лучшим вариантом, если вам это нужно.Однако вы также можете найти его с помощью приведенного выше кода, за которым следует
$match_index = array_search($matches[0], $array);
Редактировать: обратите внимание, что это предполагает, что вы знаете, что ваши строки не будут содержать специальных символов регулярного выражения.Для чисто буквенно-цифровых строк, таких как ваши примеры, это будет правдой, но если у вас будут более сложные строки, вам придется сначала их избежать.В этом случае другое решение, использующее цикл, вероятно, будет проще.