我想我找到了一種方法。
您將需要世界上所有國家的列表。例如: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