Я хочу отбросить все оставшиеся символы в строке, как только встретится один из нескольких нежелательных символов.
Как только встречается символ из черного списка, должна быть возвращена строка перед этой точкой.
Например, если у меня есть массив:
$chars = array("a", "b", "c");
Как мне пройти через следующую строку ...
log dog hat bat
... и в итоге получится:
log dog h






Функция strcspn - это то, что вы ищете.
<?php
$mask = "abc";
$string = "log dog hat bat";
$result = substr($string,0,strcspn($string,$mask));
var_dump($result);
?>
В ответе Винко, безусловно, нет ничего плохого, и я, возможно, был бы более склонен рекомендовать эту технику в профессиональном скрипте, потому что регулярное выражение, вероятно, будет работать медленнее, но чисто для разницы для исследователей можно использовать регулярное выражение.
Для записи, чтобы преобразовать массив ['a', 'b', 'c'] в abc, просто вызовите implode($array) - пустая связующая строка не нужна.
Код: (Демо) - разделить пополам при первом появлении a | b | c, затем получить доступ к первому элементу
echo preg_split('~[abc]~', $string, 2)[0];
Код: (Демо) - сопоставить ведущую подстроку символов, отличных от a | b | c, затем получить доступ к первому элементу
echo preg_match('~^[^abc]+~', $string, $match) ? $match[0] : '';
Я должен заявить, что если какой-либо из ваших символов в черном списке имеет особое значение для механизма регулярных выражений, находясь внутри класса символов, то их нужно будет экранировать.