Я хочу сопоставить массив с строкой и заменить название города, содержащееся в строке, тире (-)
Например:
$str = 'French Tuition In Newyork' OR $str = 'French Tuition Newyork'; $arrCity = array('Newyork', 'Washington');
Я хочу заменить приведенные выше строки, как показано ниже,
$str = 'French Tuition - Newyork' AND $str = 'French Tuition - Newyork';
Таким образом, если последнее слово является городом, оно должно быть предварительно добавлено тире (-). ИЛИ Если последним словом является город, а перед последним словом «IN», «IN» следует заменить тире (-).
Вы можете просто сделать это с этим.
<?php $str = 'French Tuition In Newyork'; $str2 = 'French Tuition Newyork'; $arrCity = array('Newyork', 'Washington'); $temp = array(); $split = explode(" ", $str); $lastword = $split[count($split)-1]; $beforeLastWord = $split[count($split)-2]; if(in_array($lastword, $arrCity)) { if(strtolower($beforeLastWord) === 'in') { $split[count($split)-2] = '-'; } else { $split[count($split)-1] = '-'; array_push($split, $lastword); } } echo implode(" ", $split); ?>
Для справки.
<?php //$str = 'French Tuition Newyork'; $str = 'French Tuition In Washington'; $arrCity = array('Newyork', 'Washington'); $in_str = 'In'; foreach ($arrCity as $key => $value) { $pos = strpos($str, $value); if($pos) { $pos2 = strpos($str, $in_str); if($pos2) $temp_str = explode($in_str, $str); else $temp_str = explode($value, $str); $result = $temp_str[0] . ' - ' . $value; echo $result; } } ?>
<?php $str = 'French Tuition Washington'; $arrCity = array('Newyork', 'Washington'); $cities = implode('|', $arrCity); echo preg_replace("/(French Tuition).+({$cities})/", '$1 - $2', $str); ?>
Это эффективно;)
<?php $str = 'French Tuition In Washington'; $str1 = 'French Tuition Newyork'; function dash($string) { if (strpos($string,'In') !== false) { echo str_replace('In','-',$string); } else { $arrCity = array('Newyork', 'Washington'); foreach($arrCity as $city) { if(strpos($string,$city)) { echo str_replace($arrCity,'- '.$city,$string); } } } } dash($str); dash($str1); ?>
Вывод
French Tuition - Washington French Tuition - Newyork