我有一个字符串,其中包含一个名称后跟一个城镇。就像John Smith Smithville
。
我需要将其分为两个变量(name
,town
)或数组。
我有一系列城镇名称要检查。什么是在字符串中找到城镇名称后将字符串分成两个的最佳方法?
$string = "John Smith Smithville";
$townlist = array("smithville", "janeville", "placeville");
if(contains($string,$townlist))
{
//separate into two variables
}
答案 0 :(得分:6)
这使用正则表达式来完成它。
/
,或者我们不能使用array_map()
(preg_quote()
的第二个参数是分隔符。)|
加入他们。$matches
的名称为1
,城镇的名称为2
。 $string = 'John Smith Smithville';
$townlist = array('smithville', 'janeville', 'placeville');
if (preg_match_all(
'/^(.*)\s(' . implode('|', array_map('preg_quote', $townlist)) . ')$/i',
$string,
$matches
))
{
var_dump($matches);
}
array(3) {
[0]=>
array(1) {
[0]=>
string(21) "John Smith Smithville"
}
[1]=>
array(1) {
[0]=>
string(10) "John Smith"
}
[2]=>
array(1) {
[0]=>
string(10) "Smithville"
}
}
答案 1 :(得分:1)
这就是我认为的伎俩
应该工作,做了一些测试。
$string = "John Smith Smithville";
$townlist = array("smithville", "janeville", "placeville");
function stringSeperation($string, $list)
{
$result = array();
foreach($list as $item)
{
$pos = strrpos(strtolower($string), strtolower($item));
if($pos !== false)
{
$result = array(trim(substr($string, 0, $pos)), trim(substr($string, $pos)));
break;
}
}
return $result;
}
var_dump(stringSeperation($string, $townlist));
答案 2 :(得分:0)
您是否考虑过“特殊情况”,例如:“约翰史密斯纽约”?或“纽约纽约”(名称可以包含空格,人名可以与城市相同)
我认为更合适的解决方案是:对于每个字符串str,我们检查所有城市名称。检查程序是(伪代码):
foreach str in strArray[]
foreach city in cities
tmp = Get the substring in the end of str, which equal the length of the "city"
if (tmp == city) then {name = substring(str, 0, strlen(str) - strlen(tmp)); break;}