Ответ Роберта Питта - единственный, который затрудняет зацикливание и является более сложным, чем необходимо.
Методы Джоны и Колина О'Делла интересны, но и тяжелее, чем необходимо.
Орблинг действительно сблизился с его preg_replace
методом, он убирает слишком много запятых и также не учитывает вероятность того, что игла является единственным значением.
str_replace
и preg_replace
оба имеют явное преимущество: они не беспокоятся о explode
и implode
. Это должно быть основным разделителем ответов на этой странице. Методы, которые преобразуют строку в массив и обратно в строку (не говоря уже о дополнительной обработке), будут менее эффективными, чем методы _replace
.
Я также отмечу, что никто не упомянул array_diff
в их explode
/ implode
методах, поэтому я включу его в свой список методов, даже если он опирается на explode
и implode
. Это чисто для демонстрации.
Все методы str_replace
потенциально ненадежны, если игла является подстрокой другого значения. Поскольку образец ввода ввода OP не предлагает конфликта в этом отношении, я создал метод str_replace
.
Мой однострочный preg_replace
метод скудный и надежный.
echo preg_replace("/,facebook\b|\bfacebook,|\bfacebook\b/","",$data);
Используя границы слов (\b
), мой шаблон регулярных выражений защищен от вероятности наличия иглы внутри другого значения. См. Проверяя иглу с ведущей запятой, затем запятой, затем без запятой; шаблон все еще остается в силе, если единственным значением в строке является игла. Наконец, если стрелка отсутствует в строке csv, ошибки нет. Это ответ, который должны реализовывать ТАКИЕ читатели.
Если вы генерируете иглу динамически, вы можете объявить свой паттерн двумя способами:
$needle="facebook";
echo preg_replace("/,$needle\b|\b$needle,|\b$needle\b/","",$data);
// OR
echo preg_replace("/,".$needle."\b|\b".$needle.",|\b".$needle."\b/","",$data);
( Демо )
Мое второе место предлагает использование str_replace
:
$args=[["facebook",",,"],["",","]];
echo trim(str_replace($args[0],$args[1],$data),",");
Он заменяет facebook
, затем заменяет любые двойные запятые на одну запятую, а затем удаляет все начальные или конечные запятые из полученной строки.
И на третьем месте explode
-> array_diff
-> implode
в виде однострочного:
echo implode(',',array_diff(explode(',',$data),["facebook"]));
Это жесткий однострочник, но ему все равно придется взяться за дело, чтобы взорваться, отфильтровать и взорваться.
Вот мой испытательный полигон , где я проверял все три метода.