我想我找到了一种方法。
您将需要世界上所有国家的列表。例如: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;
https://3v4l.org/POMPT
编辑;想到了我刷牙时的一种方式。
由于countryarr将只有墨西哥我可以与preg_replace只替换一次。
此外,我不得不将更换模式更改为countryarr的内爆。
现在剩下的是一个首先用下划线和一个或多个用下划线分开的单词的州/城市。
因此,用空格替换下划线并修剪字符串。
EDIT2;现在我已经有了一些睡眠,我认为与国家匹配的阵列会非常大。
所以我做了一个改变。
国家的每个首字母都是一个新数组,并且代码只会在具有相同首字母的国家中循环。
你可以尝试把它分成数组,然后抓住数组作为城市中的最后一项,和所有其余的认为它是该国因此与空间投身其中的一部分。 – felixmosh
PHP无法阅读您的想法。你必须定义一些东西。要么使用更好的分隔符(不能是您的国家字符串的一部分),要么添加一个不应该被替换的下划线的黑名单。 –
对于Smarty来说,这不太合适。在PHP中进行字符串拆分,替换等,让Smarty模板只处理大写字母(它属于表示层;其余部分是数据操作)。 – axiac