Допустим, у меня есть такая строка
Я летаю из "Детройта в Ванкувер" в июле этого года
$string = 'I am flying from "Detroit to Vancouver" this July';
У меня также есть массив "stopwords
"(слова, которые я выбираю для удаления из строки / строк)
$stopwords = array( "to", "anotherstopword", "andanother" )
Сейчас я просто использую
$string = str_replace($stopwords, ' ', $string);
Это, конечно, дает мне string(33) "I am flying from "Detroit Vancouver" this July"
Я думал о том, чтобы взорвать $string
с пробелом перед str_replace
, давая мне что-то вроде
Array
(
[0] => I
[1] => am
[2] => flying
[3] => from
[4] => "Detroit
[5] => to
[6] => Vancouver"
[7] => this
[8] => July
)
Затем, возможно, удалив их из массива, выполнивзаменить и снова вставить их ... но это кажется излишним
Я также думал об использовании такой функции
function getStringBetween($str, $from, $to, $withFromAndTo = false)
{
$sub = substr($str, strpos($str, $from) + strlen($from), strlen($str));
if ($withFromAndTo)
return $from . substr($sub, 0, strrpos($sub, $to)) . $to;
else
return substr($sub, 0, strrpos($sub, $to));
}
При этом
<code> echo '<pre>';
print_r(getStringBetween($string, '"', '"'));
echo '
';
Выходы:
Детройт в Ванкувер
И выполнение некоторого типа условия игнорирования перед str_replace ..
Но это терпит неудачу всякий раз, когда в строке есть несколько кавычек ..
В идеале я хотел бы создать условие, где, если строка содержит двойные кавычки, полностью игнорировать их в процессе str_replace
.
Я, конечно, не против использования чего-то другого, кроме str_replace, например preg_replace, но у меня нет достаточного опыта с этим, чтобы создать образец для ожидаемого результата.
Может кто-нибудь придумать хороший способигнорировать стоп-слова / слова, которые нужно удалить перед заменой?
РЕДАКТИРОВАТЬ:
Пример кода
<?php
$stopwordstest = array( " to ", " a ", " test " );
$string = 'I am flying from "Detroit to Vancouver" this July when the weather is test nice';
var_dump($string);
// as is, without string replace
// string(79) "I am flying from "Detroit to Vancouver" this July when the weather is test nice"
$string = str_replace($stopwordstest, ' ', $string);
echo '<br><br>';
var_dump($string);
// string(71) "I am flying from "Detroit Vancouver" this July when the weather is nice"
// Expected output is:
//
// string(74) "I am flying from "Detroit to Vancouver" this July when the weather is nice"
//
?>
Другими словами, я хотел бы заменить строкуидти вперед, как и предполагалось, но так как слово to
заключено в кавычки ("Detroit to Vancouver"
), оно должно пропустить это слово, потому что оно в кавычках.