0

我有下面的代码,我试图从城市状态字符串中提取城市。它在大多数情况下都有效,但发现它在下面不起作用,因为科罗拉多州在城市中并且也是州。我需要制作$geography_nav科罗拉多斯普林斯,并且当该州不属于城市字符串时,我还需要它来工作。关于如何做到这一点的任何想法?

$geography->description = Colorado
$geography->name- = Colorado Springs Colorado

 $geography_nav=explode($geography->description, $geography->name);</code>

I am updating this, I don't necessarly need to use explode, just trying to find some way to extract the city out of the city state string. The format will always be the same as shown above in $Geography->name and the

$Geography->description将始终等于州名。

4

3 回答 3

1

我使用了strrpos函数,它从右侧搜索字符串的实例。

如果您知道 $geography->name 肯定具有位于 $geography->description 末尾的状态,这将起作用。

$statePos = strrpos($geography->name, $geography->description);
if ($statePos>0){
   $state = substr($geography->description, $statePos);
   $city = substr($geography->description, 0, strlen($geography->description)-$statePos);
}
于 2013-02-08T21:30:42.740 回答
0

好吧,我想如果你有一个状态数组,你可以尝试做一个 strrpos() 并找到每个状态名称的最后一个事件(如果有的话)。Explode 不会对你有任何帮助。

于 2013-02-08T21:30:37.970 回答
0

实际上,这里的正则表达式是您真正需要的。在每个条目上使用 preg_match http://www.php.net/manual/en/function.preg-match.php

正则表达式:$regex = '/([a-z\s]+)\s[(Arizona),(New Mexico)]/i'

用法:preg_match( $regex , $string , $matches ); $city = $matches[1];

(将所有状态,逗号分隔并在括号内添加到方括号中)

编辑

要使用您在上面提供的代码:

if( preg_match( '/^([a-z\s]+)\s' . $geography->description . '/i' , $geography->name, $matches ) )
    $geography_nav = $matches[1];
于 2013-02-08T21:52:08.787 回答