我有下一个字符串:
countries_united_states_ohio
有时它可以是countries_spain_madrid
如何删除“国家/地区”一词并输出下一个输出:
United States, Ohio
或
Spain, Madrid
我正在使用Smarty,我试过这样的事情:
{$string|replace:"_":", "|capitalize}
问题在于它返回美国,国家(如预期的那样),我想我可以删除“国家/地区”这个词。使用substr。
任何人都有任何想法?
谢谢!
答案 0 :(得分:0)
使用explode将其拆分为_
$textString = "countries_united_states_ohio";
$split = explode("_",$textString);
$ split现在将
$split = [countries,united,states,ohio];
然后你可以用它做你想要的,$ split [#]的位置,重组等等。
countries_spain_madrid
echo $split[1].",".$split[2];
输出=>西班牙,马德里
countries_united_states_ohio
echo $split[1]." ".$split[2].",".$split[3];
输出=>美国,俄亥俄州
但这里的问题是你设置它的方式,没有有效的编程方式来确定它是一个空格还是分隔单词的分隔符(即united_states或countries_span_madrid)。
如果你知道进入的是什么,你可以这样解决它,但它仍然不是很有效,这意味着你基本上静态地做它或确定它的特定词语,这意味着它是一个一个单词(美国)或单个世界的单词组
你可以尝试使用不同的分隔符来表示空格和单词分割。也许_为空间和 - 分裂。比如说united_states-ohio
答案 1 :(得分:0)
如果countries_
总是在开头,删除它会很容易,听起来你已经知道如何做到这一点。
但我不认为在Smarty或PHP中只使用字符串函数来正确分割字符串的其余部分。问题是,如果下划线也将用于分隔具有多个单词的单词,例如“美国”,则需要在术语之间使用不同的分隔符。代码无法知道每个下划线是否表示术语分隔符或单个术语中的空格。
如果将输入字符串与可能包含的可能术语(国家,州,城市等)列表进行比较,您可能能够完成它,但它将比仅仅替换字符串复杂得多。希望您能够修改这些字符串的存储或生成方式,以便它们使用不同的分隔符。
答案 2 :(得分:0)
我想我找到了办法 您需要一份世界上所有国家的列表。示例:https://www.countries-ofthe-world.com/all-countries.html
代码将查看字符串的每个部分,看看它是否是"国家/地区字"如果是真的:
它将确保它还没有抓住这个词(参见所有" uinited"国家)。
如果它尚未在国家/地区阵列中,则将其添加到那里。
现在我可以摧毁这个国家。
州/城市是我删除国家和_
的剩余部分。
$Ucountries = ["Uganda",
"Ukraine",
"United Arab Emirates (UAE)",
"United Kingdom (UK)",
"United States of America (USA)",
"Uruguay",
"Uzbekistan"];
$Mcountries = ["Macedonia (FYROM)",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Mauritania",
"Mauritius",
"Mexico",
"Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Morocco",
"Mozambique",
"Myanmar (Burma)"];
$str = "countries_mexico_mexico_city";
//$str = "countries_united_states_ohio";
$str = str_replace("countries_", "", $str);
// Copy array needed to $CountryList
$CountryList = ${strtoupper(substr($str,0,1)). "countries"};
$countryarr = array();
$arr = explode("_", $str);
Foreach($arr as $val){
Foreach($CountryList as $item){
If(stripos($item, $val) !== false){
If(!in_array($val, $countryarr)){
$countryarr[] = $val;
}
}
}
}
$country = implode(" ", $countryarr);
$state_city = preg_replace("/" . implode("_",$countryarr) . "/", "", $str,1);
$state_city = trim(str_replace("_", " ", $state_city));
Echo $country . "\n" . $state_city;
编辑;当我刷牙的时候想到了一种方式
由于countryarr只有墨西哥,我可以用preg_replace替换一次。
此外,我不得不将替换模式更改为countryarr的内爆
现在剩下的是一个州/城市,首先是下划线,一个或多个单词用下划线分隔
所以用空格替换下划线并修剪字符串。
EDIT2;现在我已经睡了一觉,我认为与国家相匹配的阵列会非常大 所以我做了一个改变 国家/地区的每个首字母都是一个新数组,代码只会在具有相同首字母的国家/地区循环播放。