Лучший и самый быстрый способ удалить специальную строку из строки в PHP? - PullRequest
1 голос
/ 16 февраля 2011

Eg

$stringOriginal = "C D E F G H I J K L M N";

$stringRemove = "E F M";

И я хочу удалить строку $ stringRemove из $ stringOriginal! Итак, я могу получить

$result = "C D G H I J K L N";

Большое спасибо !!

Ответы [ 7 ]

3 голосов
/ 16 февраля 2011

Метод без preg

$stringOriginal = "C D E F G H I J K L M N";
$stringRemove = "E F M";

$removals = explode(' ',$stringRemove);
$result = str_replace($removals,'',$stringOriginal);
$result = str_replace('  ',' ',$result);
2 голосов
/ 16 февраля 2011

Предполагая, что не более , чем то, что было указано в вашем вопросе, моя первоначальная мысль будет заключаться в использовании preg_replace и поиске следующих символов (с дополнительными пробелами):

$stringOriginal = "C D E F G H I J K L M N";
print preg_replace('/(E|F|M)\s+?/', '', $stringOriginal);

Какие выходы: C D G H I J K L N

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

Использовать str_replace с $stringRemove, взорванным в массив.

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

Вот что я бы сделал:

echo implode(' ', str_replace(explode(' ', $stringRemove), '', explode(' ', $stringOriginal)));

Будет возвращено «CDGHIJKLN», так что вам все равно придется проверять наличие неправильных пробелов (это легко).

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

с использованием preg_replace:

//no spaces needed in the filter 'E F M' should be 'EFM' for this function
function specialFilter($body, $filter) {
  return preg_replace("/[$filter]/", '', $body);
}

//example usage
$filteredMessage = specialFilter('C D E F G H I J K L M N', 'EFM');

//if double spaces are not allowed after the filtered elements are removed run this
$filteredMessage = str_replace('  ', ' ', $filteredMessage);

см .: preg_replace & str_replace

1 голос
/ 16 февраля 2011
$result= str_replace($stringRemove, "", $stringOriginal);

Но тогда ваш $ stringRemove будет array('E', 'F', 'M');, а не форматом, который вы используете.

0 голосов
/ 16 февраля 2011

Кажется, что все используют str_replace, но я боюсь, что есть токены, и значения могут быть вложены в другое значение.Может быть, я ошибаюсь, и это излишне, но решение в любом случае:

$stringOriginal = "C D E F G H I J K L M N";
$stringRemove = "E F M";

var_dump(implode(' ',array_diff(explode(' ',$stringOriginal),explode(' ',$stringRemove))));

приводит к:

string(17) "C D G H I J K L N" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...