使用explode或regex或substr函数从php中提取一个状态的城市

时间:2013-02-08 21:00:03

标签: php explode

我有以下代码,我试图从城市状态字符串中提取城市。它适用于大多数情况,但发现它在下面不起作用,因为科罗拉多州在城市,也是州。我需要制作$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_nav=explode($geography->description, $geography->name);</code> 将始终等同于州名。

3 个答案:

答案 0 :(得分:1)

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

如果您知道$ geography-&gt;名称肯定具有位于$ geography-&gt; description末尾的状态,则此 会有效。

$statePos = strrpos($geography->name, $geography->description);
if ($statePos>0){
   $state = substr($geography->description, $statePos);
   $city = substr($geography->description, 0, strlen($geography->description)-$statePos);
}

答案 1 :(得分:0)

嗯,我想如果你有一个状态数组,你可以尝试做一个strrpos()并找到每个州名的最后一个事件(如果有的话)。爆炸对你没有任何帮助。

答案 2 :(得分: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];

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

修改

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

if( preg_match( '/^([a-z\s]+)\s' . $geography->description . '/i' , $geography->name, $matches ) )
    $geography_nav = $matches[1];