как убрать запятую во время взрыва и заменить? - PullRequest
5 голосов
/ 14 февраля 2011
$data = "google,facebook,youtube,twitter,bing";

$exp = explode(",",$data);

$rep = str_replace("facebook",$exp);
$final = implode(",",$rep);

echo $final

output// google,,youtube,twitter,bing

Как мне убрать это пробел с запятой?

Ответы [ 6 ]

4 голосов
/ 14 февраля 2011

Вот как должен выглядеть ваш код:

$data = "google,facebook,youtube,twitter,bing";
$exp = explode(",",$data);

foreach($exp as $key => $item)
{
   if(trim($item) == "facebook")
   {
       unset($exp[$key]); //Remove from teh array.
   }
}

$final = implode(",",$rep);
echo $final;

или если у вас нет пробелов внутри, вы можете просто пойти

$data = str_replace(",facebook,",",",$data);

Для многих осложнений, используя str_replace, просто используйте циклический метод.

3 голосов
/ 14 февраля 2011
$data = "google,facebook,youtube,twitter,bing";

$exp = explode(',', $data);
$index = array_search('facebook', $exp);
if ($index !== false){
    unset($exp[$index]);
}

$final = implode(',', $exp);

http://php.net/array-search

2 голосов
/ 14 февраля 2011

Вы можете удалить пустые элементы из массива, используя array_filter($data):

$data = str_replace("facebook", "", "google,facebook,youtube,twitter,bing");

$exp = array_filter(explode(",",$data));

$final = implode(",",$rep);

echo $final;

http://php.net/manual/en/function.array-filter.php

"Если обратный вызов не предоставлен, все записи ввода, равные FALSE (см. Преобразование в логическое значение), будут удалены."

Это то, что вы ищете?

1 голос
/ 14 февраля 2011

Есть много способов сделать это, но, возможно, самый простой это просто:

$data = str_replace(',,', ',', $data);
0 голосов
/ 02 апреля 2017

Ответ Роберта Питта - единственный, который затрудняет зацикливание и является более сложным, чем необходимо. Методы Джоны и Колина О'Делла интересны, но и тяжелее, чем необходимо.

Орблинг действительно сблизился с его 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"]));

Это жесткий однострочник, но ему все равно придется взяться за дело, чтобы взорваться, отфильтровать и взорваться.

Вот мой испытательный полигон , где я проверял все три метода.

0 голосов
/ 14 февраля 2011
$data = "google,facebook,youtube,twitter,bing";

$final = preg_replace("/(^facebook,?|,facebook,|,facebook$)/", "", $data);

В качестве альтернативы:

$final = implode(',', preg_grep("/^facebook$/", explode(',', $data), PREG_GREP_INVERT));

См. preg_grep ()

...